Ios UITableview按钮在滚动上突出显示

Ios UITableview按钮在滚动上突出显示,ios,objective-c,uitableview,uibutton,Ios,Objective C,Uitableview,Uibutton,我在tableview单元格中有切换按钮,我在某些单元格中单击它们,但当我向下滚动时,底部单元格也会选择相同的按钮,尽管我还没有选择它们。我知道这是因为tableview重用了单元格…有什么办法可以解决这个问题吗 细胞是动态的,而不是静态的 tableview是什么样子的 **编辑:另外,让我知道我的逻辑是否正确:我尝试在viewcontroller类中创建一个可变数组,然后将其所有值设置为@“0”。然后,在我的tableviewcell类中,如果我选择了按钮,我会在当前单元格的索引中将数组中

我在tableview单元格中有切换按钮,我在某些单元格中单击它们,但当我向下滚动时,底部单元格也会选择相同的按钮,尽管我还没有选择它们。我知道这是因为tableview重用了单元格…有什么办法可以解决这个问题吗

细胞是动态的,而不是静态的

tableview是什么样子的


**编辑:另外,让我知道我的逻辑是否正确:我尝试在viewcontroller类中创建一个可变数组,然后将其所有值设置为@“0”。然后,在我的tableviewcell类中,如果我选择了按钮,我会在当前单元格的索引中将数组中的值设置为@“1”,这样,在我的viewcontroller类中,我可以判断我是否已经在该单元格中选择了按钮。唯一的缺陷是我无法访问tableviewcell类中的数组,它的值为null…我猜这是因为objective c中的mvc模式。有什么建议吗

编辑

我仍然无法解决我的问题。有人能帮我吗?我被困在上面已经有一段时间了

我正在尝试创建一个表格视图,其中单元格有一个勾选和交叉按钮,当我单击勾选按钮时,它应该变为绿色,但其他单元格中的相同按钮应该保持灰色,然而,当我向下滚动时,一些我没有选择按钮的单元格仍然变为绿色…因为单元格循环

我现在正在使用代理和协议,但它不起作用;也许我用错了

我在我的cell类的iAction函数中设置yesChecked值,在我的viewcontroller类中,我使用该yesChecked值根据按钮是否显示“是”或“否”来查看按钮的颜色

请帮忙!谢谢

@protocol DetailsTableViewCellDelegate <NSObject>

- (void) customCell:(DetailsTableViewCell *)cell yesBtnPressed:(bool)yes;

@property (nonatomic, retain) NSString * yesChecked;
@protocol-DetailsTableViewCellDelegate
-(void)customCell:(DetailsTableViewCell*)单元格yesBtnPressed:(bool)yes;
@属性(非原子,保留)NSString*yesChecked;

您必须在
cellForRowAt
中选择或取消选择它们。例如,如果您的单元格有一个
leftButton
属性,并且您有一个这样的模型,则可以执行以下操作:

@interface Model : NSObject

@property (nonatomic, assign) BOOL selected;

@end

谢谢但我使用的是objective cAlso,让我知道我的逻辑是否正确:我尝试在viewcontroller类中创建一个可变数组,然后将其所有值设置为@“0”。然后,在我的tableviewcell类中,如果我选择了按钮,我会在当前单元格的索引中将数组中的值设置为@“1”,这样,在我的viewcontroller类中,我可以判断我是否已经在该单元格中选择了按钮。唯一的缺陷是我无法访问tableviewcell类中的数组,它的值为null…我猜这是因为objective c中的mvc模式。有什么建议吗?在Obj-C中基本相同,但我已经更新了我的答案。您应该在单元格中实现委托,以便单元格中的点击可以更新ViewController中的数据源。考虑到单元格的可重用性,在单元格级别拥有数据源是行不通的。您好,谢谢您的回复!很抱歉再次打扰您,我在计算该单元格的代理时遇到了问题,您能给我提供一些示例代码或发送一个有用的链接吗?我更新了答案,添加了一个代理示例。你必须根据你想要达到的目标来改变参数和逻辑,但我认为这会让你对方法有一个大致的了解。
@protocol CustomCellDelegate <NSObject>

- (void)cellActionTapped:(UITableViewCell *)cell;

@end
@interface CustomCell : UITableViewCell

@property (nonatomic, assign) BOOL leftButtonSelected;
@property (weak, nonatomic, nullable) id<CustomCellDelegate> delegate;

@end
// ModelViewController.h
@interface ModelViewController : UIViewController<CustomCellDelegate>

@end
// ModelViewController.m
@interface ViewController () {
    NSArray<Model*>* models;
}

@end
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
    ((CustomCell *)cell).delegate = self;
    ((CustomCell *)cell).leftButtonSelected = models[indexPath.row].selected;
    return cell;
}

- (void)cellActionTapped:(UITableViewCell *)cell {
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];
    // Update data source using (maybe) indexPath.row
}