2012-03-15 3 views
1

Я по-прежнему относителен к объекту c, поэтому, пожалуйста, воздержитесь от меня, если это вопрос новобранец. Я пытаюсь установить заголовок моего навигационного контроллера соответствующей информацией об объекте. Я использую для этого метод prepareforsegue, но первый раз переходит к новому контроллеру, заголовок пуст. Если я попробую снова, он появится, но если я нажал что-то еще, он покажет название вещей, которые я нажал раньше. Я включил свой код ниже.Prepareforsegue navigationItem.title один за

//.h 

#import <UIKit/UIKit.h> 

@interface STATableViewController : UITableViewController 

@property(strong,nonatomic)NSArray *listOfExercises; 
@property(weak,nonatomic)NSString *navTitle; 

@end 

//.m 

#import "STATableViewController.h" 
#import "ExercisesViewController.h" 

@implementation STATableViewController 

@synthesize listOfExercises = _listOfExercises, navTitle = _navTitle; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    _listOfExercises = [NSArray arrayWithObjects:@"Raketstart",@"SpeedBåd",@"Træstamme",nil]; 
    self.navigationItem.title = @"Exercises";  
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return [_listOfExercises 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]; 
    } 

    NSString *cellValue = [_listOfExercises objectAtIndex:indexPath.row]; 
    cell.textLabel.text = cellValue; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _navTitle = [_listOfExercises objectAtIndex:indexPath.row]; 
    //NSLog(_navTitle); 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"toExercise"]) 
    { 
     ExercisesViewController *foo = [segue destinationViewController]; 
     foo.navigationItem.title= _navTitle; 
    } 
} 

@end 

ответ

5

Это происходит потому, что prepareForSegue:sender: вызывается перед тем tableView didSelectRowAtIndexPath:. Таким образом, вы всегда устанавливаете заголовок вашего навигационного объекта, прежде чем устанавливать свой ресурс _navTitle со значением, которое вы хотите.

Вместо того, чтобы заголовок в пути didSelectRowAtIndex, сделайте это в вашем prepareForSegue так:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"toExercise"]) 
    { 
     // "sender" is the table cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

     NSString *title= [_listOfExercises objectAtIndex:indexPath.row]; 

     ExercisesViewController *foo = [segue destinationViewController]; 
     foo.navigationItem.title = title; 
    } 
} 
+0

Это работало, большое спасибо :) –

Смежные вопросы