目标- c:应用范围内完全可重用的自定义UITableViewCell



嗨,这个问题已经被问了很多次了,但是我从来没有找到一个合适的解决方案:

我有一个自定义的UITableViewCell显示用户个人资料图片和一个"关注"/"关注"按钮。在整个应用程序中,我在大约10个UIViewControllers/UITableViewControllers中重用此单元格。

现在我的问题:在UITableViewCell类中添加"以下"按钮操作逻辑(即跟随或取消关注用户的服务器调用)将反对MVC,所以我目前将操作添加到tableView:cellForRowAtIndexPath:中的按钮,并在UIViewController操作方法中调用必要的代码,例如- (void)followUnfollowUser:(id)sender。(实际的服务器调用是在一个具有静态方法的外部类中,但对它的调用仍然在followUnfollowUser:(id)sender方法中)

这意味着每次我需要使用自定义UITableViewCell时,我都需要将此代码添加到控制器。除了UI逻辑(这是允许在UITableViewCell类),我没有看到任何重用。为什么与UITableViewCell相关的操作应该在UIViewController中?是否有一种方法,我可以重用自定义UITableViewCell,而不必重写跟随/取消跟随动作?

谢谢

只需在单元格中实现按钮并处理那里的操作。从创建单元格的视图控制器中,你所需要做的就是在你的自定义单元格上调用某种模型更新——这将允许单元格直接从内部调用API——或者你的应用程序中的任何动作都可以直接在自定义单元格类中编码。

如果你需要任何反馈给UIViewController重新加载视图或其他-添加一个委托,当用户点击这些元素时将被调用或使用NSNotificationCenter用于此目的。

您可以使用DelegateBlock

创建一个属性并从视图控制器分配代码,然后在按钮上运行,单击run it

@property (nonatomic, strong) void (^loginCompletionBlock)(BOOL);
@property (nonatomic, copy) void (^inviteBlock)(NSDictionary*result);
- (IBAction)click:(id)sender{
    if(self.inviteBlock){
        self.inviteBlock(data);
    }
}

最新更新