2015-10-12 195 views
1

我有一個UITableView其中包含所有國家的名稱。 用戶可以隨時通過點擊cell刪除或編輯國家的名稱。在UITableViewCell中添加自定義編輯和刪除按鈕

我的UITableView細胞最初看起來是這樣的:

enter image description here

現在,當用戶點擊它,我改變這樣的:

enter image description here

我想我下面一個很這是我所做的:

聲明全局按鈕添加:

UIButton *btnDeleteWithImage,*btnDeleteWithText,*btnEditWithImage,*btnEditWihtText; //buttons 

而一個NSMutableArray跟蹤indexPath.row

現在在我的didSelectMethod我這樣做:

//To change the background 
UIView *selectionBackground = [[UIView alloc] init]; 

    selectionBackground.backgroundColor = [UIColor customColor]; 

cell.selectedBackgroundView = selectionBackground; 

// to check which cell is pressed 

if([indexPathCollection containsObject:index]) 
{ 
    [btnDeleteWithImage removeFromSuperview]; 
    [btnDeleteWithText removeFromSuperview]; 
    [btnEditWihtText removeFromSuperview]; 
    [btnEditWithImage removeFromSuperview]; 
    [indexPathCollection removeObject:index]; 

    [cell addSubview:btnDeleteWithImage]; 
    [cell addSubview:btnDeleteWithText]; 
    [cell addSubview:btnEditWithImage]; 
    [cell addSubview:btnEditWihtText]; 
    [indexPathCollection addObject:index]; 
} 
else 
{ 

    [cell addSubview:btnDeleteWithImage]; 
    [cell addSubview:btnDeleteWithText]; 
    [cell addSubview:btnEditWithImage]; 
    [cell addSubview:btnEditWihtText]; 
    [indexPathCollection addObject:index]; 
} 

但這不是工作good.When我滾動表編輯和刪除按鈕隨機發生。

有人有更好的想法如何以非常有效的方式實現這一點。

+0

你可以查看這個http://stackoverflow.com/questions/19164188/custom-edit-view-in-uitableviewcell-while-swipe-left。 –

+0

您的方法不起作用,因爲您可能正在重複使用cellforrowatindexpath委託方法中的單元格。 – elbuild

+0

我該怎麼做... @elbuild請幫助我 – NSUser

回答

1

最簡單的方法是不要重複使用單元格。 &用相同的標識註冊您的自定義單元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

customCell* cell = [[customCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier:@"indentifire"] ;          

// manage your plooting here .. 

return cell; 
} 

希望它適合你。

2

你可以通過你的屬性

創建一個自定義單元格CustomCell.h

@interface CustomCell : UITableViewCell 

@property (nonatomic, strong) UIButton *btnDeleteWithImage; 
@property (nonatomic, strong) UIButton *btnDeleteWithText; 
@property (nonatomic, strong) UIButton *btnEditWithImage; 
@property (nonatomic, strong) UIButton *btnEditWithText; 

@end 

初始化它們在細胞的init方法讓他們隱藏着第一或者你還可以實現這一

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    static NSString *customCellIdentifier = @"customCellIdentifier"; 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:customCellIdentifier]; 

    if (!cell) { 
     cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:customCellIdentifier]; 
     // or you can initialize and add them to the cell here 
    } 
    //here you can modify them accordingly 
    return cell; 
} 

那麼代表方法可以是

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

    CustomCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell.btnDeleteWithImage setHidden:NO]; 
    [cell.btnEditWithImage setHidden:NO]; 
} 
相關問題