0

このトピックは何度も取り上げられてきましたが、提案されたすべての解決策を 2 日間調査して試してみましたが、まだやりたいことができません。

まず、ストーリーボードを使用して、iOS 5 用のアプリを作成しています。

2種類のセル(元の「メッセージ」とそれに対するいくつかの「回答」)を持つUITableViewControllerがあります。ストーリーボードにテーブルを作成し、「プロトタイプセル」をチェックし、2 つまたは 3 つのラベル、textView、および画像を使用して 2 つのセルを設計しました。次に、 と という 2 つの新しいクラスでサブクラス化しUITableViewCellました。セルの要素のプロパティを作成したので、ラベルのテキストと画像をプログラムで設定できます。いつものように、グラフィック要素をストーリーボードの定義にリンクしました。私の TableViewController では、セルを作成して入力します。これまでのところ、すべてが正しく表示され、希望どおりに表示されています。ThreadAlertCellThreadAnswerCellcellForRowAtIndexPath

しかし、セルの画像に「タッチ」して、新しいビューをポップして、ユーザーのプロファイルページを表示したい(他の基本的なビュー、performSegueで実行できますが、問題ありません)。

私は非常に多くのことを試しましたが、ここにすべてを詳細に記載することが非常に役立つかどうかはわかりません. 答えを探しているうちに、UIImageViewジェスチャを処理することが期待されるときに a を使用することは、実際には最善の方法ではないことがわかりました。だから私はそれをに変更しましたUIButton。しかし、タッチイベントで何もすることができません!

「回答」セルの例だけを示します。

これが私のThreadAnswerCellヘッダー ファイルです (.m は指定しません。興味深いものは何もありません)。

@interface ThreadAnswerCell : UITableViewCell

@property (nonatomic) IBOutlet UILabel *senderLabel;
@property (nonatomic) IBOutlet UILabel *dateLabel;
@property (nonatomic) IBOutlet UITextView *contentTextView;
@property (nonatomic, weak) IBOutlet UIButton *senderButton;

@end

そして、これcellForRowAtIndexPathが私のTableViewControllerの半分です(その前の「メッセージ」についても同じことをします):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"ThreadAnswerCell";
    ThreadAnswerCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[ThreadAnswerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    Message *message = [threadArray objectAtIndex:indexPath.row];

    cell.senderLabel.text = [NSString stringWithFormat:@"%@", message.sender];
    cell.contentTextView.text = [NSString stringWithFormat:@"%@", message.content];
    cell.dateLabel.text = [NSString stringWithFormat:@"%@", message.date];
    //[cell.senderButton setBackgroundImage: [[UIImage alloc] initWithData: [NSData dataWithBase64EncodedString: message.userPic]]
    //                             forState: UIControlStateNormal];

    [cell.senderButton addTarget:self action:@selector(firstButtonSelected:) forControlEvents:UIControlEventTouchUpInside];

    CGRect frame = cell.contentTextView.frame;
    frame.size.height = cell.contentTextView.contentSize.height;
    cell.contentTextView.frame = frame;
    [cell.contentTextView sizeToFit];

    return cell;
}

ご覧のとおり、カスタム セルを使用してコンテンツを入力し (3 つ使用しても意味stringWithFormatがありませんが、理由があります 笑)、ボタンにイベントを追加しようとしています。また、ボタンの背景画像を設定して画面上のボタンを「見る」部分についてもコメントしました。

そして、ここにボタンが呼び出すメソッドがあります:

- (void)firstButtonSelected: (id)sender
{
    NSLog(@"hello");
}

しかし、メソッドが呼び出されることはありません! 私がどこで間違ったのか、または他の実用的な解決策についてのアイデアは素晴らしいでしょう! ありがとう。

4

2 に答える 2

3

ありますか - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

テーブルビューデリゲートクラスに実装されていますか?

あなたのセルはタッチイベントをキャッチすると思います。メソッドを削除してみてください。と cell.selectionStyle = UITableViewCellSelectionStyleNone

于 2012-08-21T08:57:19.523 に答える