2017-09-17 57 views
0

我已經爲UITableView類寫入了類別。在那裏,我添加了添加刷新控制器的方法。在Obj-C中添加來自addTarget動作函數的回調

我想我的刷新控制器目標方法給主函數回調。

我的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]; 
    }]; 
+1

分類不能添加存儲特性,所以也沒有辦法,你可以在塊存儲以便稍後調用它。 – Paulw11

+1

我對你所問的有點困惑。如果您希望能夠從'refreshTableView'內部調用'completionBlock',則需要存儲對回調的引用。您不能在類別中執行此操作,因爲類別不能包含實例變量。 – RPK

+0

我可以在refresh控制對象中存儲completionBlock嗎? –

回答

0

我解決了這個通過取UIRefreshControl的子類,並存儲在完成塊;

SubClass-

#import <UIKit/UIKit.h> 

typedef void (^UITableViewRefreshControllerCompletion) (UITableView *tableView); 

@interface UIRefreshControlSubClass : UIRefreshControl 

@property(strong, nonatomic) UITableViewRefreshControllerCompletion completionBlock; 

@end 

所以通話變成了:

-(void)addRefreshController:(UITableViewRefreshControllerCompletion)completionblock { 

    UIRefreshControlSubClass *refreshControl = [[UIRefreshControlSubClass alloc]init]; 
    [refreshControl setTintColor:[UIColor appthemeblueColor]]; 
    [self setRefreshControl:refreshControl]; 
    refreshControl.completionBlock = completionblock; 

    [refreshControl addTarget:self action:@selector(refreshTableView:) forControlEvents:UIControlEventValueChanged]; 

} 

-(void) refreshTableView:(UIRefreshControlSubClass*)refreshControl { 

    refreshControl.completionBlock(self); 
} 
相關問題