2012-12-04 77 views
0

我有一個UITableView 20行。在每一行中,添加了兩個UIButton,所以完全有40個按鈕。我如何訪問每個單元格中的每個按鈕?所有這些UIButton有兩個tag的1和2如何訪問UITableViewCell中的UIButton或UILabel?

例如:我想寫一個方法來改變的2個按鈕的背景顏色在一個特定的行:

-(void)changeColor:(int)row{ 
    //code here 
} 

你有什麼建議?

-(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"Cell"]; 
    if (cell == nil){ 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:@"Cell"] autorelease]; 
     UIButton *button1=[[UIButton alloc] initWithFrame:CGRectMake(x1,y1,w1,h1)]; 
     UIButton *button2=[[UIButton alloc] initWithFrame:CGRectMake(x2,y2,w2,h2)];  
     [button1 setTag:1]; 
     [button2 setTag:2]; 
     [[cell contentView] addSubview:button0 ]; 
     [[cell contentView] addSubview:button1 ]; 
     [button0 release]; 
     [button1 release];   
    } 
    UIButton *button1 = (UIButton *)[cell viewWithTag:1]; 
    UIButton *button2 = (UIButton *)[cell viewWithTag:2]; 
    return cell; 
} 
+0

你需要在哪裏抓取按鈕的引用?你試過這個嗎? '[cell.contentView viewWithTag:1];' –

+3

請注意,您可以有20行數據,但可能沒有20個唯一的單元格,具體取決於一次顯示多少個單元格。這是'dequeueReusableCellWithIdentifier:'操作的一部分。 –

回答

1

你應該能夠做到這一點:

-changeColor:(int)row 
{ 
    NSIndexPath indexPath = [NSIndexPath indexPathForRow:row inSection:0]; // Assuming one section 
    UITableViewCell *cell = [myTableView cellForRowAtIndexPath:indexPath]; 

    UIButton *button1 = (UIButton *)[[cell contentView] viewWithTag:1]; 
    UIButton *button2 = (UIButton *)[[cell contentView] viewWithTag:2]; 
} 

*某些語法可能是錯誤的。我沒有Xcode的方便

+0

我用你的代碼來改變第一行的按鈕,但它改變了第一行和第五行的按鈕。你知道爲什麼嗎? – DavidNg

+0

它與Phillip Mills所說的不一定有20個獨特單元格有關。在'cellForRowAtIndexPath'方法'cell!= nil'中的某處,被重用。我會做兩件事情之一:1)每次刪除if(cell == nil)和init,或者2)爲每個按鈕分配一個唯一的標籤(即indexPath.row + 100爲button1和indexPath。按鈕2的行+ 200),以便每行上的每個按鈕都是唯一的(幾乎是rdelmar所說的) –

0

如果你想更改的按鈕顏色有高亮/唐斯泰特我建議使用以下方法:

[yourButton addTarget:self action:@selector(goToView:) forControlEvents:UIControlEventTouchUpInside]; 
[yourButton addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchDown]; 
[yourButton addTarget:self action:@selector(touchCancel:) forControlEvents:UIControlEventTouchDragExit]; 

-(void)buttonAction:(UIButton*)sender 
{ 
    [self touchCancel:sender]; 
    /* DO SOME MORE ACTIONS */ 
} 

-(void)changeColor:(UIButton*)sender 
{ 
    sender.backgroundColor = [UIColor redColor]; 
} 

-(void)touchCancel:(UIButton*)sender 
{ 
    sender.backgroundColor = [UIColor clearColor]; 
} 

如果你想使按鈕有不同選定的顏色,創建一個數組來保存所有選中的狀態。然後使用該數組檢查cellForRowAtIndexPath中的按鈕顏色是否需要不同的顏色。

當你要更改按鈕的顏色只是改變數組中的值,並調用

[self.tableView reloadData]; 

一定要做到這一點,如果(細胞==零)方法之外因此它也被稱爲當細胞被重複使用。

相關問題