web-dev-qa-db-ja.com

iOS7でプルして更新

テーブルビューのiOS7でプルトゥリフレッシュ機能が正しく機能するようにしようとしています。 viewDidLoadで、私は持っています:

self.refreshControl = [[UIRefreshControl alloc] init];

    [self.refreshControl addTarget:self action:@selector(refreshInvoked:forState:) forControlEvents:UIControlEventValueChanged];

次に実行します:

-(void) refreshInvoked:(id)sender forState:(UIControlState)state {
    // Refresh table here...
    [_allEntries removeAllObjects];
    [self.tableView reloadData];
    [self refresh];
}

Refreshメソッドが呼び出すリクエストが実行されると、didCompleteRequestコードに次のようになります。

[self.refreshControl endRefreshing];

IOS 6では、これは、テーブルビューをプルダウンすると、円形の矢印が表示され、プルすると引き伸ばされ、十分に引っ張ると更新されます。ただし、現時点では、円形の矢印は表示されず、UIActivityIndi​​catorのみが表示されます。また、機能する場合と機能しない場合もあります。何が足りないのですか?

14
user717452

あなたが話している「UIActivityIndi​​cator」は、UIRefreshControlの新しいデフォルトの外観です。

プルダウンすると、円が完了すると、更新のトリガーにどれだけ近いかが示されます。

10
Infinity James

ITableViewにUIRefreshControlを追加するには...

1)ViewDidLoad ..

- (void)viewDidLoad
{
    [super viewDidLoad];

    //to add the UIRefreshControl to UIView
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Please Wait..."]; //to give the attributedTitle
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [tblVideoView addSubview:refreshControl];
}

2)関連するメソッドを呼び出してUITableViewデータを更新します...

- (void)refresh:(UIRefreshControl *)refreshControl
{
    [self refreshTableData]; //call function you want
    [refreshControl endRefreshing];
}

またはスイフトの場合

 let refreshControl : UIRefreshControl = UIRefreshControl.init()
 refreshControl.attributedTitle = NSAttributedString.init(string: "Please Wait...")
 refreshControl.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
 feedTable.addSubview(refreshControl)

 func refresh(refreshControl:UIRefreshControl){
      self.refreshTableData()//call function you want
      refreshControl.endRefreshing()
 }
21
Hardik Thakkar

デフォルトのアクティビティインジケーターを削除/非表示にしたり、独自の画像やアニメーションを追加したりできます。

更新が呼び出される前にテーブルをプルする必要がある特定のしきい値(距離)もあります。

カスタムプルして更新コントロール(objective-cおよびSwift)のチュートリアルは次のとおりです。 http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

お役に立てば幸いです。他に回答できるかどうか教えてください

2
Anthony Blatner

スイフトのアップデート

TableViewの場合

 - (void)viewDidLoad
 {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Please  Wait..")
    tableView.addSubview(refreshControl)
    refreshControl.addTarget(self, action: #selector(refreshTable), forControlEvents: UIControlEventValueChanged)
 }

- (void)refreshTable {
    //Refresh Data here
    //......
    //Once all the data is fetched. If you are loading asynchronously add the below code inside the async block
    refreshControl.endRefreshing()
    [tableView reloadData];
 }

UITableViewControllerの場合

UITableViewControllerには、refreshControlというデフォルトのプロパティがあります。これはデフォルトではnilです。必要に応じて、refreshControlを初期化して割り当てます。

let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Please Wait..")
yourTableViewController.refreshControl = refreshControl
1
iPrabu