在UITableView

时间:2016-01-13 09:24:17

标签: ios uitableview uibutton

enter image description here

我必须在点击每个单元格时将此“关注”按钮更改为“关注”,当我再次单击“关注”时,它应该返回“关注”。 怎么可能?

4 个答案:

答案 0 :(得分:1)

从单元格到控制器创建操作。现在您可以参考您的单元格按钮

-(void)followButtonActionFromTableViewCell:(UIButton *)sender
{  
 [self followUnfolloWithButton:sender]
}

-(void)followUnfolloWithButton:(UIButton *)sender{
//you may need to call web service and set button accordingly

   [sender setTitle:@"Follow" forState:UIControlStateNormal];
    [sender setBackgroundColor:[UIColor yellowColor]];//set your colour

}

如果您想重新加载tableview,请使用。

  UIButton * button = (UIButton*)sender;
  CGRect frameRect ;
   NSIndexPath * indexPath ;
   frameRect=[button convertRect:button.bounds toView:self.tableView];
   indexPath= [self.tableView indexPathForRowAtPoint:frameRect.origin];

//Reload 

  [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic];

在cellForRowAtIndexPath方法中保存后续/后续放置检查条件的状态。和

  

通过sender.tag

更新您的模型
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//...your code
cell.yourFollowButton.tag=indexPath.row;

//check condition and set button text and colour 

    }

答案 1 :(得分:0)

问题是当你点击按钮并更改按钮的某些属性时,可能你重新加载tableView或重新加载单元格。状态没有缓存。

按钮的颜色和文字shold obsver用户模型的属性(例如:followStatus),当点击按钮时,你应该更改de model&follow.catus并重新加载单元格。

感谢。

答案 2 :(得分:0)

- (IBAction)btnStartOnClick:(id)sender {

   UIButton *someButton = (UIButton*)sender;
   NSString *str=[someButton titleForState:UIControlStateNormal];

  if ([str isEqualToString:@"Follow"]) 
   {
    [btn setTitle:@"Following" forState:UIControlStateNormal];
   }
  else if ([str isEqualToString:@"Following"])
  {
   [btn setTitle:@"Follow" forState:UIControlStateNormal];
  }

答案 3 :(得分:0)

我猜这很简单。在你的tableview didSelectRowAtIndexPath委托方法中你只需设置你的按钮颜色和标题就像这样。

   [buttonName setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
   [buttonName setTitle:@"Following" forState:UIControlStateNormal];

当您再次单击同一个单元格时,您必须检查按钮文本。您可以通过设置布尔值来实现。即当您选择特定单元格集布尔值为YES并将按钮文本设置为"以下"再次点击同一个单元格,检查是否设置了布尔值,如果设置了布尔值,则可以将文本更改为"关注"。其他选项是你必须将选定的索引路径存储在一个可变数组中,并在每个单元格的选择上尝试在数组中推送和弹出该对象。这是其他步骤

首先在你的.h文件中创建一个Mutablearray

@property (strong,nonatomic) NSMutableArray *selectedIndexPaths;

在viewDidLoad方法中使用Alloc。

 self.selectedIndexPaths = [[NSMutableArray alloc]init];

在.m文件中添加此方法

- (void)addOrRemoveSelectedIndexPath:(NSIndexPath *)indexPath
{
  BOOL containsIndexPath = [self.selectedIndexPaths containsObject:indexPath];

  if (containsIndexPath) {
    [self.selectedIndexPaths removeObject:indexPath];
  }else{
    [self.selectedIndexPaths addObject:indexPath];
  }}

现在在didSelectRowAtIndexPath委托方法中添加此方法以检查该数组是否包含您选择的索引路径。

[self addOrRemoveSelectedIndexPath:indexPath]//call of the method;
 BOOL isSelected = [self.selectedIndexPaths containsObject:indexPath];

 if(isSelected)
 {
  //change your button text and color.
 }else{//unset your button text and color..}

通过这种方式,您可以轻松管理单元格的索引路径。无论发生冲突......