0

写真を撮るためにカメラを開くことになっているTableViewのカスタムセルにボタンがあります。

私は2つの方法を考えましたが、それらを機能させることはできません。最初の 1 つは、セル内から UIImagePickerController のインスタンスを開くことです。うーん、呼べないみたいだね

[self presentViewController...];

細胞の中から。これは正しいですか?

この「結果」のため、UIImagePickerController を開くメソッドを TableViewController 内に配置し、このメソッドをセル内 (ボタンが配置されている場所) から次のように呼び出すことを考えました。

[super openCamera];

または、TableViewController をセルのデリゲートにして、メソッドを呼び出せるようにします。

これらのアイデアは正しい方向に進んでいますか? あなたは何をお勧めします?どうもありがとうございました!

4

2 に答える 2

0

これは古い質問ですが、古い質問にも答えてもらいたいので... はい、ブロックを使用する簡単な方法があります:

まず、UITableViewCell インターフェイスで public メソッドを宣言します。

@interface YourCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIButton *button;

- (void)setDidTapButtonBlock:(void (^)(id sender))didTapButtonBlock;

@end

UITableViewCell サブクラスの実装ファイルで、copy 属性を持つプライベート プロパティを宣言します。

#import "YourCell.h"

@interface YourCell ()

@property (copy, nonatomic) void (^buttonTappedBlock)(id sender);

@end

UITableViewCell コンストラクターに UIControl のターゲットとアクションを追加し、セレクター メソッドを実装します。

- (void)awakeFromNib {
    [super awakeFromNib];

    [self.button addTarget:self 
                    action:@selector(didTapButton:)  
          forControlEvents:UIControlEventTouchUpInside];
}

- (void)didTapButton:(id)sender {
    if (buttonTappedBlock) {
        buttonTappedBlock(sender);
    }
}

最後に、コントローラーの tableView:cellForRowAtIndexPath: メソッドにブロック コードを実装します。

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    YourCell *cell = (YourCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                 forIndexPath:indexPath];

    [cell buttonTappedBlock:^(id sender) {
        NSLog(@"%@", item[@"title"]);
    }];

    return cell;
}

ブロックの詳細については、ブロックの操作を参照してください

于 2014-12-05T05:53:27.143 に答える
0

わかりました、私は何かを考え出しましたが、もっと簡単にできるかどうかまだ疑問に思っています. これが私が見つけた解決策です:

追加したカスタムセルで

@property (nonatomic, assign) id adminController;

次に、tableViewController で、次のメソッドをカスタマイズして、作成したカスタム セルを使用し、tableViewController を「admin」に設定しました。

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

    // Configure the cell...
    cell.adminController = self;

    return cell;
}

だから私は最終的に呼び出すことができました

[self.adminController performSelector:@selector(openCamera)];
于 2013-05-31T13:25:20.627 に答える