2013-06-03 106 views
5

我正在使用此方法將UILabel添加到我的UITableView和它的工作正常,但我還需要創建一個方法來選擇行並保存到一個臨時字符串。didSelectRowAtIndexPath爲自定義標籤單元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{  
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
          reuseIdentifier:CellIdentifier]; 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; 
    [cell.contentView addSubview:label]; 
    label.text = [tableArr objectAtIndex:indexPath.row]; 
    label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; 
    return cell; 
} 

但它不工作。當我使用cell.textLabel時它工作正常,但與自定義標籤不匹配。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell1 = [tableView cellForRowAtIndexPath:indexPath]; 
    UILabel *lbltemp = cell1.textLabel; 

    _parent.labelone.text = lbltemp.text;  
} 

回答

10

你可以創建自己的UITableViewCell子類來讓你得到引用您的標籤(和阻止您在單元格中創建多個標籤)。或者你可以使用標籤是這樣的:

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

    if (cell = nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
         reuseIdentifier:CellIdentifier]; 

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; 
     label.tag = 123123; 
     [cell.contentView addSubview:label]; 
    } 

    UILabel *label = (UILabel *)[cell viewWithTag:123123]; 
    label.text = [tableArr objectAtIndex:indexPath.row]; 
    label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UILabel *label = (UILabel *)[cell viewWithTag:123123]; 

    _parent.labelone.text = label.text;  
} 

你的原代碼添加一個新的標籤,但隨後試圖從默認標籤的文本......它也總是創建一個新的細胞,並添加新標籤對它來說非常浪費。

此外,你通常不應該在標籤中存儲文字,你應該真的到你的tableArr去獲取文字。標記方法更適合於在重用單元格時更新標籤,或者讓用戶編輯文本(在UITextField中)。

2

問題是cell1.textLabel不是您創建的標籤。它只是單元格創建的默認標籤。

的解決辦法是:

添加標籤到您的標籤,當你創建你的自定義單元格。

label.tag=100;

didSelectRow

使用

UILabel *lbltemp=(UILabel *)[cell1.contentView viewWithTag:100]; 

然後_parent.labelone.text=lbltemp.text; should抓住從該標籤文本。

2

不工作的原因是您沒有引用didSelectRowAtIndexPath中的自定義標籤。去自定義標籤的參考,最簡單的方法是使用標籤:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{  
    static NSString *CellIdentifier = @"Cell"; 

    // Also, this is the proper way to use reuseIdentifier (your code is incorrect) 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
          reuseIdentifier:CellIdentifier]; 
    } 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10, 300, 30)]; 
    [cell.contentView addSubview:label]; 

    label.text = [tableArr objectAtIndex:indexPath.row]; 
    label.font = [UIFont fontWithName:@"Whitney-Light" size:20.0]; 
    label.tag = 1; 

    return cell; 
} 

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath { 
    UITableViewCell *cell1 = [tableView cellForRowAtIndexPath:indexPath]; 
    UILabel *customLabel = [cell viewWithTag:1]; 
    _parent.labelone.text = customLabel.text;  
} 
0

這裏([cell.contentView addSubview:label]; _)你正在創建你的自定義標籤並將它作爲子視圖添加到單元格的內容視圖中,但在UILabel中* lbltemp = cell1.textLabel;你正嘗試訪問tableview單元格的默認標籤。向標籤添加一些標識符(如標籤)並在didSelectRowAtIndexPath中訪問它。

0

我認爲你可以使用默認的標籤,並從這種解決方法 拒絕只需添加

cell.textLabel.frame = CGRectMake(10,10, 300, 30); 

而且它的內存更好的重用細胞在韋恩的回答

0

使用cell.indentationallevel或cell.indentationwidth

相關問題