首先,我想说我只是提出这个问题,因为我想了解正在发生的事情。
我在 Xcode5 的全新安装中打开了一个旧的 Xcode 项目(一个非常简单的项目)。当我意识到它在 iOS 7 上不起作用时。为什么?不知道。。
看到了一些其他的问题,没有得到任何有用的答案,所以我做了一个简单的测试。在UITableViewController
所有工作正常,除了didSelectRowAtIndexPath
看看这个
RootViewController.h:
@interface RootViewController : UITableViewController
@property (strong, nonatomic) NSMutableArray *items;
@end
RootViewController.m 在 viewDidLoad 中我初始化了数组(带有一些字符串)。
实现dataSource和delegate方法(是的,我将delegate和dataSource设置为tableView)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_items count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.textLabel.text = [_items objectAtIndex:indexPath.row];
return cell;
}
问题在这里:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:NO];
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}
DetailViewController
是一个简单的 UIViewController:
(是的,我在 nib 文件上设置了 IBOutlet)
@interface DetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *detailLabel;
@end
问题是这在 iOS7 上不起作用,标签DetailViewController
没有更新。我尝试在pushViewController
.
这适用于所有早期版本的 iOS。
为什么不能在 iOS 7 上运行?
我得到这个工作的唯一方法是,就像我在另一个问题上看到的那样:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
dispatch_async(dispatch_get_main_queue(), ^{
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
});
}
有人可以帮我了解这里发生了什么吗?
谢谢!
_
编辑
它也可以这样工作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here, for example:
// Create the next view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// Push the view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
if (detailViewController.view) {
// do notihing
}
detailViewController.detailLabel.text = [_items objectAtIndex:indexPath.row];
}