2013-04-29 114 views
1

我目前有一個有8行的表格,每個表格都有一個右側的標籤和一個左側的按鈕。我希望我可以隱藏所有的按鈕,直到用戶按下右上角的「編輯」按鈕,然後它們會出現,允許用戶與每個表格單元交互。我不知道這是可能的,因爲他們在UITableViewCell S或如果有召喚按鈕,每個單元更簡單的方法在UITableViewCell中隱藏按鈕

UPDATE

好了,所以我已經擺在所有隱藏屬性,似乎沒有錯誤,但應用程序不承認任何。儘管它們被設置爲初始隱藏,但按鈕仍然未被隱藏。這裏是我的代碼

這裏是我的表格單元格代碼:

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

    cell.textLabel.text = @"Free Block"; 

    UIButton*BlockButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    BlockButton.frame = CGRectMake(225.0f, 5.0f, 75.0f, 35.0f); 
    [BlockButton setTitle:@"Change" forState:UIControlStateNormal]; 
    [BlockButton addTarget:self action:@selector(Switch:) forControlEvents:UIControlEventTouchUpInside]; 

    Blockbutton.backgroundColor = [UIColor colorWithRed:102/255.f 
               green:0/255.f 
               blue:51/255.f 
               alpha:255/255.f]; 
    Blockbutton.hidden = YES; 
    [cell addSubview:BlockButton]; 
    return cell; 
} 

,這裏是我的方法的代碼:

- (IBAction)Editmode:(UIButton *)sender 
{ 
    Blockbutton.hidden = !Blockbutton.hidden; 
    [self.tableView reloadData]; 
} 

任何想法或想法,可能是什麼問題?

+0

這是可能的。按鈕有一個「隱藏」屬性,您可以將其設置爲YES或NO。 – matt 2013-04-29 19:08:51

回答

0

這裏的訣竅是記住表的單元格由cellForRowAtIndexPath:確定。您可以通過發送表reloadData:來重新調用該方法。

所以,只保留一個BOOL實例變量/屬性。使用該按鈕切換該實例變量並致電reloadData:。如果在調用cellForRowAtIndexPath:時,實例變量爲YES,則將按鈕hidden設置爲YES;如果否,則爲NO。

+0

謝謝你的回覆,但我似乎有一個問題 – Hammy 2013-04-29 19:36:07

+0

對不起,我不小心打入和評論,反正這聽起來可能真的很愚蠢,但我在哪裏可以找到我的UITableViewController的名稱或指針,我不完全知道什麼對象正在調用方法,所以我得到一個「沒有已知的選擇器reloadData類方法」錯誤消息在我的代碼行,只是說[[UITableView reloadData];> – Hammy 2013-04-29 19:45:35

+0

它是'[self.tableView reloadData] ' – matt 2013-04-29 19:47:28

0

取一個BOOL變量,它定義是否顯示刪除按鈕,使用BOOL var to爲btnName.hidden = boolVar,最初使用boolVar = NO,當用戶點擊編輯時切換bool var並重新載入tableview。

3

如果您還沒有子類,您需要創建一個UITableViewCell子類。在該類中,覆蓋setEditing:animated:,如果新值爲YES,則啓用/添加/取消隱藏按鈕。

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

    if (editing) { 
     // add your button 
     someButton.hidden = NO; 

    } else { 
     // remove your button 
     someButton.hidden = YES; 
    } 
} 

這將是可選的,但我們鼓勵你動畫的變化,如果animatedYES

注意:這假定你已經編輯按鈕已經掛鉤了UITableView編輯模式的改變。如果不這樣做,請在按鈕操作中撥setEditing:animated:UITableView。這將在每個可見表格單元格上自動調用setEditing:animated:

+0

太棒了!這對我來說非常合適。我只是想補充說,整個if語句可以用一行代碼替換:'someButton.hidden =!editing' – alondono 2014-11-20 11:59:03

0

另一種方法是測試cellForRowAtIndexPath方法中是否處於編輯模式。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = //(obtain your cell however you like) 
    UIButton *button = cell.button; //(get button from cell using a property, a tag, etc.) 
    BOOL isEditing = self.editing //(obtain the state however you like) 
    button.hidden = !isEditing; 
    return cell; 
} 

而且只要你進入編輯模式,重新加載tableView數據。這將使表格視圖再次請求單元格,但在這種情況下,按鈕將被設置爲不隱藏。

- (void)enterEditingMode { 
    self.editing = YES; 
    [self.tableView reloadData]; 
}