2

我在 Stack Overflow 上阅读了一些类似的问题,但没有一个给出令人满意的答案。

我想要实现的是“设置”屏幕中的“Facebook 登录按钮”。

Facebook 设置屏幕

我想使用静态单元来实现这一点。但我很快发现我无法使用 Xcode 将“Action”连接到 UITableViewCell。

然后,我尝试使用内部带有 UIButton 的自定义 UITableViewCell 来实现相同的结果,但它导致了很多额外的样式问题,使其看起来与真正的 UITableViewCell 完全一样。

现在我设法使用以下解决方案使 UITableViewCell 表现得像一个按钮:

我将“登录按钮”UITableViewCell 的标识符更改为“登录按钮”。我将以下代码添加到表视图控制器中。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([[selectedCell reuseIdentifier] isEqualToString:@"loginButton"]) {
        NSLog(@"Clicked");
        // Execute function to run code for Login button
    }
}

我现在将执行一个函数,而不是执行一个 IBAction(如果我可以像 Xcode 中的按钮一样链接它,就会出现这种情况)。

这按预期工作。但我提出这个问题的原因是:我想知道这是否是正确的方法。这个可以吗?这很糟糕吗?为什么这是好的或坏的?有更好的解决方案吗?谢谢!

4

1 回答 1

8

这是一个合理的方法。

使用 indexpaths 的类似解决方案是:

为 IB 的 Table View Cell 创建一个出口。

@property (strong, nonatomic) IBOutlet UITableViewCell *loginButtonCell;

然后实现 didSelectRowAtIndexPath: 方法。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath       *)indexPath
{
    if ([indexPath isEqual:[tableView indexPathForCell:self.loginButtonCell]])
    {
        // This will get called when you cell button is tapped
    }
}

然后您可以重新订购,而无需修改您的代码

于 2012-11-13T01:00:00.433 回答