2013-02-26 134 views
0

我在我的代碼中有一個簡單的關鍵問題。隱藏UIButton的UITableviewcell

當我按下我的編輯按鈕(位於導航欄上)時,我的桌面視圖需要編輯UITableview的方法。我想隱藏「我的手機」上的按鈕和標籤。

代碼:

我加入我的按鈕這樣的..

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *currentCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    currentCell = nil; 
    if (currentCell==nil) 
    { 
     currentCell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    BtnEmail=[UIButton buttonWithType:UIButtonTypeCustom]; 
    //BtnEmail = (UIButton *)[currentCell viewWithTag: 3]; 
    BtnEmail.frame=CGRectMake(265, 17, 25, 25); 
    BtnEmail.tag=indexPath.row; 
    //[BtnEmail setTitle:@"E-mail" forState:UIControlStateNormal]; 
    [BtnEmail setBackgroundImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal]; 
    [BtnEmail addTarget:self action:@selector(BtnEmail:) forControlEvents:UIControlEventTouchUpInside]; 
    [currentCell.contentView addSubview:BtnEmail]; 
    [currentCell.contentView bringSubviewToFront:BtnEmail]; 



    return currentCell; 
} 

我的編輯按鈕聲明這樣

編輯按鈕:

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

而且在編輯點擊我的這個方法會調用。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 
    [listTableView setEditing:editing animated:animated]; 

    if(editing) 
    { 
     self.navigationItem.leftBarButtonItem.enabled = NO; 
     //BtnEmail.frame=CGRectMake(355, 17, 25, 25); 
     BtnEmail.hidden = TRUE; 
    } 
    else 
    { 
     self.navigationItem.leftBarButtonItem.enabled = YES; 
     //BtnEmail.frame=CGRectMake(265, 17, 25, 25); 
     BtnEmail.hidden = FALSE; 
    } 

    [super setEditing:editing animated:animated]; 
} 

在這種情況下,我的最後一個單元格按鈕和標籤不會隱藏所有。我需要隱藏我的Cell的所有UIButton。

一樣,如果我有表3單元格,然後它會隱藏只有最後一個按鈕僅 ..

感謝。

+0

這將是因爲在這種情況下,您將獲得最後創建的BtnEmail參考。 – Exploring 2013-02-26 11:10:42

回答

3

你可以這樣做只是讓有條件的支票cellForRow當編輯改變重載表視圖。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Do your other stuff 

// Add this conditional check 
if (tableView.editing) 
{ 
    BtnEmail.hidden = YES; 
} 
else 
{ 
    BtnEmail.hidden = NO; 

} 
[currentCell.contentView addSubview:BtnEmail]; 
[currentCell.contentView bringSubviewToFront:BtnEmail]; 

return currentCell; 
} 


- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 

[super setEditing:editing animated:animated]; 
[listTableView setEditing:editing animated:animated]; 

// Reload the table view 
[listTableView reloadData]; 
// Do your other stuff 
} 

但很容易通過使用自定義單元格來創建該按鈕。在這裏,您一次又一次地添加按鈕。否則將按鈕創建代碼移動到if(cell == nil)

+0

阿尼爾謝謝男人....現在它的工作很好......! – Vivek2012 2013-02-26 11:37:04

0

那是因爲你正在申報

BtnEmail.hidden = FALSE; 

在這種情況下是你最後一次分配的按鈕cellForRowAtIndexPath方法。嘗試是這樣的:

if(editing) 
     { 
      self.navigationItem.leftBarButtonItem.enabled = NO; 
      //BtnEmail.frame=CGRectMake(355, 17, 25, 25); 
      For(int i=0; i< [tableArray count]; i++) 
     { 
      UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] ; 
      UIButton *btn=(UIButton *)[cell viewWithTag:i]; 
      btn.hidden = TRUE; 
     } 
     } 
    else 
    { 
     self.navigationItem.leftBarButtonItem.enabled = YES; 
      //BtnEmail.frame=CGRectMake(265, 17, 25, 25); 
     For(int i=0; i< [tableArray count]; i++) 
     { 
      UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] ; 
      UIButton *btn=(UIButton *)[cell viewWithTag:i]; 
      btn.hidden = FALSE; 
     } 
     } 
+0

我應該在哪裏寫這個For循環.... – Vivek2012 2013-02-26 11:23:09

+0

我已編輯答案..檢查它 – 2013-02-26 11:26:15

+0

上一個工作正常..感謝您的幫助。 @iPhone開發者。 – Vivek2012 2013-02-26 11:37:36