2012-05-04 2 views
0

UIViewController 안에 UITableView이 있습니다. 데이터, 자막 데이터 및 액세서리 버튼은 모두로드가 잘됩니다. 그러나 액세서리 버튼을 누르면 모두 인덱스 0이 반환됩니까? dataSourcedelegate은 .xib의 File 's Owner에 연결되어 있습니다. 무엇이 누락 되었습니까?단추가 포함 된 테이블보기 셀에 항상 인덱스가있는 것 같습니다.

헤더 파일 :

@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 페이지.

+0

'tableView : cellForRowAtIndexPath :'의 버튼 자체에이 값을 설정하는 것이 더 쉽지 않을까요? 해야한다면 UIButton을 서브 클래스 화하고 커스텀'NSIndexPath' 속성을 추가하면됩니다. 'UIButton'의'superview'에가는 것보다 쉽고 안정적으로 보입니다. 게다가, 당신은'tableView : cellForRowAtIndexPath :'에 대한 추가 호출을 여러 번 피할 수 있습니다. – mbm29414

+0

@ mbm30075 tableView : cellForRowAtIndexPaht : UIButton에 하위 클래스를 구현하는 방법을 잘 모르겠습니다 ... 내 현재 방식이 내가 생각했던 것 같아요 ... 나는 당신의 제안을 Google에 시도 할 것입니다. 고마워. – AhabLives

+0

superview가 tableViewCell이 아닌 것 같습니다. 시도해보십시오 :'NSLog (@ "% @", [셀 클래스]); 그리고 당신이 무엇을 얻고 있는지보십시오. – lnafziger

답변

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... 
} 

의미가 있습니까? 이 대답은 당신이 주요 문제 (그리고 당신의 질문의 루트)가 탭 버튼을위한 셀의 위치/인덱스 경로를 얻고 있다고 가정합니다.

1

탭핑 된 항목의 위치와 indexPathForRowAtPoint를 사용하여 셀에서 탭한 모든 항목의 경로를 찾는 훨씬 간단한 방법은 내 대답 here을 참조하십시오.

+0

이 반환되었습니다. 그것은 "self.tableView"를 호출하는 것과 관련이 있습니다 ??? 방법이나 이유는 확실치 않지만 데이터를 잃어버린 것 같습니다. buttonPressed의 * cell의 NSLog는 올바른 데이터를 반환합니다. – AhabLives

+0

콘센트가 tableView에 대해 정의되어 있고 tableView에 연결 했습니까? 이것은 테이블 viewcontroller 자동으로 수행되지만 일반 UIViewController 사용하는 참조하십시오. – jrturton

관련 문제