嗨,这个问题已被多次询问,但我无法找到适合下列情况的解决方案:
我有一个自定义UITableViewCell
,其中会显示用户个人资料图片以及'关注'关注'按钮。我在整个应用中大约10 UIViewControllers
/ UITableViewControllers
重复使用此单元格。
现在回答我的问题:添加'关注' UITableViewCell
类中的按钮动作逻辑(即服务器调用以跟随或取消关注用户)将针对MVC,所以我当前将动作添加到tableView:cellForRowAtIndexPath:
中的按钮并在UIViewController
内调用必要的代码{1}}行动方法,例如- (void)followUnfollowUser:(id)sender
。
(实际的服务器调用是使用静态方法的外部类,但对此的调用仍在followUnfollowUser:(id)sender
方法中)
这意味着每次我需要使用自定义UITableViewCell
时我需要将此代码添加到控制器。除了UI逻辑(在UITableViewCell
类中允许)之外,我没有看到任何重用。为什么与UITableViewCell
相关的操作应该在UIViewController
?有没有办法可以重用自定义UITableViewCell
而无需重写跟随/取消关注操作?
由于
答案 0 :(得分:1)
只需在单元格内部实现按钮并在那里处理操作。 从创建单元格的视图控制器,您需要做的就是在自定义单元格上调用某种模型更新 - 这将允许单元格直接从内部调用API - 或者在您的应用程序中执行的操作可以直接在自定义内部编码细胞类。
如果您需要任何反馈给UIViewController来重新加载视图或smth - 添加一个委托,当用户点击这些元素时将调用该委托,或者为此目的使用NSNotificationCenter。
答案 1 :(得分:0)
您可以使用Delegate
或Block
创建一个属性并从View Controller中分配代码,然后在按钮上单击运行
运行@property (nonatomic, strong) void (^loginCompletionBlock)(BOOL);
@property (nonatomic, copy) void (^inviteBlock)(NSDictionary*result);
- (IBAction)click:(id)sender{
if(self.inviteBlock){
self.inviteBlock(data);
}
}