0

UITableViewの中に がありますUIViewController。データ、字幕データ、およびアクセサリ ボタンはすべて正常に読み込まれます。ただし、アクセサリ ボタンを押すと、すべてインデックス 0 が返されますか? .xib でファイルの所有者に接続されています。何が欠けていますかdataSource?delegate

ヘッダー ファイル:

@interface OrderPage : UIViewController <UITableViewDataSource, UITableViewDelegate>  {
    NSDictionary *userOrderData;
    NSMutableArray *myMasterList;
    UITableView *tableView;
    NSMutableArray *contentss;
    NSMutableArray *mysendArray;
    NSDictionary *my_data;

}

-(IBAction)sendOrders;
@property( nonatomic, retain) NSDictionary *userOrderData;
@property ( nonatomic, retain) IBOutlet UILabel *firstOrder;
@property(nonatomic, retain) NSMutableArray *myMasterList;
@property(nonatomic, retain) UITableView *tableView;
@property(nonatomic, retain) NSMutableArray *contentss;
@property(nonatomic, retain) NSMutableArray *mysendArray;
@property(nonatomic, retain) NSDictionary *my_data;
@end

実装、私のcellForRowAtIndexPath:(ボタン セクション):

@synthesize tableView = _tableView;

UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];
button.tag = indexPath.row;
[button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor clearColor];
cell.accessoryView = button;

私のbuttonPressed方法:

- (void)checkButtonTapped:(UIButton *)sender {
    UITableViewCell *cell = ((UITableViewCell *)[sender superview]);

    NSLog(@"cell row: int%i", [self.tableView indexPathForCell:cell].row);
    NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
    NSLog(@"The row id is %d",  indexPath.row);  

    UIImageView *btnCliked =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_checkmark.png"]];
    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    [activityView startAnimating];
    cell.accessoryView = btnCliked;
}

このコードはすべて、私の他の専用UITableViewページで機能します。

4

2 に答える 2

1

タップされた項目の場所と indexPathForRowAtPoint を使用して、セル内でタップされたもののインデックス パスを見つけるはるかに簡単な方法については、こちらの回答を参照してください。

于 2012-05-04T17:24:35.760 に答える
0

UIButtonサブクラスを実装します。と呼びましょうALAccessoryButton

// Button code
@interface ALAccessoryButton : UIButton
@property (strong, nonatomic) NSIndexPath *indexPath;
@end

@implementation ALAccessoryButton
@synthesize indexPath;
@end

// In your UITableView 
- (void)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)p {
    ALAccessoryButton *btn = [ALAccessoryButton buttonWithType:UIButtonTypeContactAdd];
    [btn addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [btn setIndexPath:p];
    [cell setAccessoryView:btn];
}

- (void)checkButtonTapped:(ALAccessoryButton *)sender {
    NSIndexPath *path = [sender indexPath];
    // Now, do whatever else you need to do...
}

わかる?この回答は、主な問題 (および質問の根本) が、タップされたボタンのセルの場所/インデックス パスを取得していることを前提としています。

于 2012-05-04T17:12:43.600 に答える