gpt4 book ai didi

iphone - 重新加载 TableView 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:43 26 4
gpt4 key购买 nike

更新了我的问题

我有一个设置页面,左侧显示设置名称,右侧显示当前设置 (UITableViewCellStyleValue1)。当您点击设置的单元格时,您会看到一个操作表,您可以在其中选择“查看全部”、"is"、“否”。我的目标是将他们选择的值放入单元格的右侧,以便他们可以看到所做的更改。

操作表事件

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0) {
thisVal = @"Show All";
NSLog(@"Button 0");
} else if (buttonIndex == 1) {
thisVal = @"Yes";
NSLog(@"Button 1");
} else if (buttonIndex == 2) {
thisVal = @"No";
NSLog(@"Button 2");
} else if (buttonIndex == 3) {
NSLog(@"Button 3");
}

[self saveSettings:thisKey :thisVal];

NSLog(@"Before: %@",[table2settings objectAtIndex:(NSUInteger)thisRow]);

if (thisSection == 0){
[table1settings replaceObjectAtIndex:(NSUInteger)thisRow withObject:thisVal];
}else{
[table2settings replaceObjectAtIndex:(NSUInteger)thisRow withObject:thisVal];
}

NSLog(@"After: %@",[table2settings objectAtIndex:(NSUInteger)thisRow]);

[self.tblView reloadData];
}

由于 BeforeAfter NSlog,我可以看到实际数组正在更新。但是 tblView 不会重新加载。数据。

cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier;
if (indexPath.row == 0 && indexPath.section == 0){
CellIdentifier = @"CellWithSwitch";
}else{
CellIdentifier = @"PlainCell";
}


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}

if (indexPath.section == 0){
[[cell textLabel] setText:[table1labels objectAtIndex:indexPath.row]];
if (indexPath.row == 0 && indexPath.section == 0){
BOOL switchOn;
if ([[table1settings objectAtIndex:indexPath.row] isEqualToString: @"On"]){
switchOn = YES;
}else{
switchOn = NO;
}

switchview = [[UISwitch alloc] initWithFrame:CGRectZero];
[switchview setOn:switchOn animated:YES];
[switchview addTarget:self action:@selector(updateCurrentLocation) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = switchview;
}else{

if (![[table1settings objectAtIndex:indexPath.row] isEqualToString: @""]){
[[cell detailTextLabel] setText:[table1settings objectAtIndex:indexPath.row]];
}else{
[[cell detailTextLabel] setText:@""];
}
}
}else{
if (![[table2settings objectAtIndex:indexPath.row] isEqualToString: @""]){
[[cell detailTextLabel] setText:[table2settings objectAtIndex:indexPath.row]];
}else{
[[cell detailTextLabel] setText:@""];
}
[[cell textLabel] setText:[table2labels objectAtIndex:indexPath.row]];

}

return cell;
}

更多信息

这是我的 .h 文件的@interface:

NSMutableArray *table1settings;
NSMutableArray *table2settings;

在那之下:

@property (nonatomic, retain) NSMutableArray *table1labels;
@property (nonatomic, retain) NSMutableArray *table2labels;

还有我的 .m 文件:

@synthesize table1settings;
@synthesize table2settings;

更新当前位置

- (void)updateCurrentLocation {
switchview.on ? [self saveSettings:@"useLocation" :@"On"] : [self saveSettings:@"useLocation" :@"Off"];
NSLog(@"%@", [self loadSettings:@"useLocation"]);
}

再来一次

@interface DOR_FiltersViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UIActionSheetDelegate>
UITableView *tblView;
@property (nonatomic, retain) UITableView *tblView;
@synthesize tblView;

另外,对于 @implementation DOR_FiltersViewController,我收到一条警告说“未完成的实现”。我不知道该通用语句可能意味着什么。尝试查找它,它几乎似乎意味着什么。

修复

首先,我发现我没有将 tblView 连接到我的 TableView 。 -.- 我必须右键单击 TableView 并将其拖到我的 .h 文件并将其链接到 tblView。我以为我已经做到了。我现在觉得很傻。然后,对于@interface,我不得不使用__weak IBOutlet UITableView *tblView;,在那个@property (weak, nonatomic) IBOutlet UITableView *tblView;下成功了。

最佳答案

两件事:table1settingstable2settings 应该是 NSMutableArray 虽然根据错误你得到这不是问题。

看起来 thisVal 是您类(class)的一个 iVar。您应该在 clickedButtonAtIndex:

中分配它

试试这个:

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

NSString *thisVal; //this line was added

if (buttonIndex == 0) {
thisVal = @"Show All";
NSLog(@"Button 0");
} else if (buttonIndex == 1) {
thisVal = @"Yes";
NSLog(@"Button 1");
} else if (buttonIndex == 2) {
thisVal = @"No";
NSLog(@"Button 2");
} else if (buttonIndex == 3) {
NSLog(@"Button 3");
}

[self saveSettings:thisKey :thisVal];

if (thisSection == 0){
NSLog(@"thisRow is %d and table1settings has %d elements", thisRow, [table1settings count]);
[table1settings replaceObjectAtIndex:(NSUInteger)thisRow withObject:thisVal];
}else{
NSLog(@"thisRow is %d and table2settings has %d elements", thisRow, [table2settings count]);
[table2settings replaceObjectAtIndex:(NSUInteger)thisRow withObject:thisVal];
}
[self.tblView reloadData];
}

当然还有删除 thisVal 的其他实现(可能在 @interface 部分)。

另请注意,replaceObjectAtIndex: 具有以下结构:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject

对于 index 应该有简单的 NSUinteger

编辑:

如果调用 [self.tblView reloadData]; 没有启动任何 cellForRowAtIndexPath: 调用,那么 self.tblView 没有被正确引用。

编辑 2:

确保- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath所在类采用UITableViewDataSource协议(protocol)。

您在 .h 文件中执行此操作,例如:

@interface YourClass:UIViewController <UITableViewDataSource>

而且你应该让知道她的dataSource是谁。在代码中,你设置的地方

self.tblView = thatTable;

添加

self.tblView.dataSource = self;

如果您正在使用任何 UITableViewDelegate 方法,您必须将其加入混合:

@interface YourClass:UIViewController <UITableViewDataSource,UITableViewDelegate>

self.tblView.delegate = self;

关于iphone - 重新加载 TableView 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907464/

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