Во-первых, я хотел бы сказать, что я только задаю этот вопрос, потому что я хотел бы понять, что происходит.tableView didSelectRowAtIndexPath не работает должным образом на iOS 7. Почему?
Я открыл старый проект Xcode (очень простой) в новой установке на Xcode5. Когда я понимаю, что он не работает на iOS 7. Почему? Не знаю ..
Я видел несколько других вопросов, не получил никакого полезного ответа, поэтому я сделал простой тест. В UITableViewController
все работает отлично, за исключением на didSelectRowAtIndexPath
Проверьте это
RootViewController.h:
@interface RootViewController : UITableViewController
@property (strong, nonatomic) NSMutableArray *items;
@end
RootViewController.m В viewDidLoad я инициализировать массив (с некоторыми строками).
Реализовать DataSource и делегировать методы (да и я установить делегат и 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:
(да, я установил IBOutlet на файл nib)
@interface DetailViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *detailLabel;
@end
Проблема в том, что это не работает на iOS7, метка в DetailViewController
не обновляется. Я пытаюсь установить текст надписи до и после pushViewController
.
Это работает со всеми предыдущими версиями iOS.
Почему не работает на iOS 7 ??
Единственный способ, которым я получить эту работу в том, что я видел на this other question:
- (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];
});
}
Может кто-нибудь помочь мне понять, что здесь происходит ??
Спасибо!
_
EDIT
также работает так:
- (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];
}
вы пытаетесь поставить точку останова внутри этого метода увидеть, если это называется? –
да, это называется. – Frade
вы работаете на iPhone приложение? –