gpt4 book ai didi

xcode - OSX Cocoa NSButton类型复选框 "Select all "问题,如何解决?

转载 作者:行者123 更新时间:2023-12-03 16:20:12 25 4
gpt4 key购买 nike

我在表格 View 中有多个复选框。在表格之外,我有一个复选框,其中包含操作选择所有内容,如下所示:

- (IBAction)selectAll:(NSButton *)sender {

for (int i = 0; i < [mainTable numberOfRows]; i++) {

NSTableCellView *cellView = [mainTable makeViewWithIdentifier:@"MainCell" owner:self];

for(NSButton *button in cellView.subviews){

//I have multiple buttons, i need one with toolTip
if([[button toolTip] isEqualToString:@"select"]){

[button setState:sender.state];

}
}
}

}

该代码运行良好,但 View 未更新。我尝试了 [mainTable reloadData] 但我猜这不是为了这个。

简单问题如何更新 View ?

我尝试过:

1)创建新的 NSButton 并替换旧的,但没有运气。 View 未更新。

2) 尝试动态创建 NSButtons 而不是使用设计器然后应用代码,但没有成功。这也很奇怪。当我在 cellView 中动态创建元素时,只有 subview 是我使用设计器创建的。

3) [button setNeedsDisplay:YES] 也不起作用;

我不是经验丰富的 Mac 程序员。

更新

-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{

NSDictionary *flag = [emails objectAtIndex:row];
NSString *identifier = [tableColumn identifier];

if([identifier isEqualToString:@"MainCell"]){
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"MainCell" owner:self];
[cellView.textField setStringValue:flag[@"subject"]];
cellView.textField.drawsBackground = YES;
[cellView.textField setBackgroundColor:[NSColor whiteColor]];
//[cellView setBackgroundStyle:NO];


NSButton *checkBox;
NSRect frame_checkbox = NSMakeRect(7, 35 , 317, 20);
checkBox = [[NSButton alloc] initWithFrame:frame_checkbox];
//NSLog(@"Message id: %@", flag[@"id"]);
[checkBox setButtonType:NSSwitchButton];
[checkBox setObjectValue:flag[@"id"]];
[checkBox setState:NO];
[checkBox setTitle:@""];
[checkBox setToolTip:@"Select message with Id"];

我终于明白了:

         if([flag[@"ischecked"] boolValue] == 1){ 
[checkBox setState:YES];
}
else{
[checkBox setState:NO];
}
[cellView addSubview:checkBox];

//other subview shere


return cellView;
}
return nil;
}

这部分代码用于添加 subview 。

新更新

NSMutableArray *emails;
emails = [[NSMutableArray alloc] init];


[emails addObject:@{@"id":@"1", @"from":@"some name",
@"subject":@"some subject",
@"email":@"some email",
@"date":@"10 min ago",
@"ischecked":@NO}];

因为这是 NSMutableArray 我没有 addObject。为了执行 addObject 操作: NSMutableArray *emails 必须是 NSMutableDictionary *emails但我不知道如何将对象添加到 NSMutableDictionary;

如果我做类似的事情:

for(NSMutableDictionary *dict in emails){
NSLog(@"%@", dict);
[dict setObject:@"1" forKey:@"ischecked"];

}

我收到错误:

[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance

最佳答案

假设 emails 是您的数据源:

NSDictionary *flag = [电子邮件 objectAtIndex:row];

flag 是位于indexPath 的字典。

您需要修改电子邮件,以便它保存复选框的值,然后在 viewForTableColumn 中执行以下操作:

[checkbox setState:flag[@"ischecked"] ? NSOffState : NSOnState];

并检查全部:

- (IBAction)selectAll:(NSButton *)sender {
NSMutableArray *emailCopy = [[NSMutableArray alloc]init];

for(NSDictionary *dict in emails){
NSLog(@"dict = %@", dict);
NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init];
[newDict addEntriesFromDictionary:dict];
[newDict setObject:@"1" forKey:@"ischecked"];
[emailCopy addObject:newDict];
NSLog(@"newDict = %@", newDict);
}

emails = emailCopy;
[tableView reloadData];
}

关于xcode - OSX Cocoa NSButton类型复选框 "Select all "问题,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26496818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com