2016-02-27 94 views
0

我有一个表格视图,其中包含可以提高和降低投票率的用户帖子。我在细胞中,我使用像这样的给予好评和downvote两个自定义按钮:当点击另一个表格时取消选择表格视图单元格中的按钮

// in cellForRowAtIndexPath: 
[cell.upVote addTarget:self action:@selector(handleThumbsUp:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.downVote addTarget:self action:@selector(handleThumbsDown:) forControlEvents:UIControlEventTouchUpInside]; 

//the methods 

- (IBAction)handleThumbsUp:(ThumbsUpButton *)sender { 

    if (sender.selected == YES) { 

     [sender setSelected:NO]; 

    } else { 

     [sender setSelected:YES]; 

    } 

} 

- (IBAction)handleThumbsDown:(ThumbsDownButton *)sender { 

    if (sender.selected == YES) { 

     [sender setSelected:NO]; 

    } else { 

     [sender setSelected:YES]; 

    } 

} 

当选择“好”按钮,用户改变了主意,并按下“大拇指向下”,我如何取消选择同一单元格中的“竖起大拇指”按钮?

回答

1

你应该有一个模型,其中包含“大拇指向上/向下”的信息;你不应该以被选择的按钮的形式将它存储在你的视图中。

当轻触其中一个按钮时,控制器应更新模型并根据模型的状态刷新视图。 (某种绑定系统会让这更容易:ReactiveCocoa就是这样一种选择(尽管它不仅仅是模型/视图绑定);另一种更简单(无耻的链接到我自己的免费代码)是我自己的UIViewController+WSSDataBindings category

0

通过@selector您可以访问按钮的属性,而不是按钮处理程序方法中单元格的另一个控件。

所以,您必须更新按钮处理程序方法的全部单元格,并手动处理cellForRowAtIndexpath表的委托方法中按钮的选定状态。

0

对于最简单的解决方案(使用最少的结构更改和代码),可以通过将按钮动作方法移动到您的自定义单元类来实现。然后加入行动,给予好评和downvote在cellForRowAtIndexPath:

// in cellForRowAtIndexPath: 
[cell.upVote addTarget:cell action:@selector(handleThumbsUp:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.downVote addTarget:cell action:@selector(handleThumbsDown:) forControlEvents:UIControlEventTouchUpInside]; 

或者你也可以直接设置从笔尖文件这个方法。

然后像这样改变upvote/downvote方法。

//the methods 

- (IBAction)handleThumbsUp:(ThumbsUpButton *)sender { 

    if (sender.selected == YES) {//upvote undone 

     [sender setSelected:NO]; 

    } else {//upvote done 

     [self.upVote setSelected:YES]; 
     [self.downVote setSelected:NO];//delesect downvote 
    } 

} 

- (IBAction)handleThumbsDown:(ThumbsDownButton *)sender { 

    if (sender.selected == YES) {//downVote undone 

     [sender setSelected:NO]; 

    } else { 

     [self.downVote setSelected:YES]; 
     [self.upVote setSelected:NO];//deselect upvote 

    } 

} 

也如约什 - 卡斯威尔他回答说,你应该有一个用户给予好评和downvote数据在数据模型你填写你的细胞。这只是这个特定情况的一个快速答案,但为了支持dataModel更改,您可以在单元格内添加对模型的引用,并在此操作方法中修改它以保存投票。

相关问题