2

Stack Overflowでこれについて同様の質問をいくつか読みましたが、満足のいく答えはありませんでした。

私が達成しようとしているのは、設定画面の「Facebookサインインボタン」です​​。

Facebook設定画面

静的セルを使用してこれを実現したいと思います。しかし、Xcodeを使用して「アクション」をUITableViewCellに接続できないことにすぐに気付きました。

次に、UIButtonを内部に持つカスタムUITableViewCellを使用して同じ結果を達成しようとしましたが、実際のUITableViewCellとまったく同じように見せるために、多くの余分なスタイリングの問題が発生しました。

これで、次のソリューションを使用して、UITableViewCellをボタンのように動作させることができました。

「ログインボタン」UITableViewCellの識別子を「loginButton」に変更しました。そして、TableViewControllerに次のコードを追加しました。

- (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

それは合理的な方法です。

インデックスパスを使用した同様のソリューションは次のようになります。

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 に答える