【发布时间】:2017-09-17 11:15:01
【问题描述】:
我已经为 UITableView 类编写了类别。在那,我添加了添加刷新控制器的方法。
我希望我的刷新控制器目标方法给主函数一个回调。
我的 tableView 类别.h
#import <UIKit/UIKit.h>
typedef void (^UITableViewRefreshControllerCompletion) (UITableView *tableView);
@interface UITableView (UITableView)
-(void)addRefreshController:(UITableViewRefreshControllerCompletion)completionblock;
-(void)removeRefreshController;
@end
我的 tableView 类别 .m :
#import "UITableView+UITableView.h"
@implementation UITableView (UITableView)
-(void)addRefreshController:(UITableViewRefreshControllerCompletion)completionblock {
UIRefreshControl *refreshControl = [[UIRefreshControl alloc]init];
[refreshControl setTintColor:[UIColor appthemeblueColor]];
[self setRefreshControl:refreshControl];
[refreshControl addTarget:self action:@selector(refreshTableView:) forControlEvents:UIControlEventValueChanged];
}
-(void) refreshTableView:(UIRefreshControl* )refreshControl {
completionblock(self); // I want this to call when this method is getting called
}
-(void)removeRefreshController {
if([self.refreshControl isRefreshing])
[self.refreshControl endRefreshing];
}
我正在调用 ViewController 中的刷新控制器:
[self.profileDetailsrTableView addRefreshController:^(UITableView *tableView){
[self profileDetailsAPICall];
}];
【问题讨论】:
-
Categories 无法添加存储属性,因此您无法存储块以便以后调用它。
-
我对你在问什么有点困惑。如果您希望能够从
refreshTableView内部调用completionBlock,则需要存储对回调的引用。您不能在类别中执行此操作,因为类别不能包含实例变量。 -
我可以在刷新控件对象中存储completionBlock吗?
-
你可以继承
UITableView来实现这个。 -
相反,如果我创建 refreshcontrol 的子类并将完成块存储在其中?
标签: ios objective-c uitableview callback uirefreshcontrol