2012-03-15 10 views
1

私はまだオブジェクトCの新機能ですので、これがルーキーな質問であれば、私には気をつけてください。対応するオブジェクト情報でナビゲーションコントローラのタイトルを設定しようとしています。私はそれのためにprepareforsegueを使用していますが、初めて新しいコントローラーへのセグがあり、タイトルは空白です。私がもう一度やり直すと、それが現れますが、何か他のものを押すと、前に押したもののタイトルが表示されます。私は以下のコードを埋め込んでいます。ナビゲーションアイテムの準備をする

//.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プロパティを設定する前に、常にnavigationItemのタイトルを設定しています。代わりに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

は、どうもありがとうございました:) –