0

わかりましたので、私はこれをさまざまな方法で試しました...

現時点ではUINavigationBar、IB に を配置しました。次に、で宣言しIBOutletます。

そこから、何を試してもタイトルを変更できないようです。だけでもViewDidLoad

また、navbar のデリゲートを割り当てる必要はありませんか?

これが私のコードです:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController < UITableViewDataSource, UITableViewDelegate>
{
    NSArray *myArrayOne;
    NSArray *myArrayTwo;
    UITextView *myTextView;
    UINavigationBar *myNavBar;   
}

@property (nonatomic, retain) NSArray *myArrayOne;
@property (nonatomic, retain) NSArray *myArrayTwo;
@property (nonatomic, retain) IBOutlet UITextView *myTextView;
@property (nonatomic, retain) IBOutlet UINavigationBar *myNavBar;


@end

と:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

//Synthesising anything with a property call in the .h file.
@synthesize myArrayOne;
@synthesize myArrayTwo;
@synthesize myTextView;
@synthesize myNavBar;

- (void)viewDidLoad
{
    //declaring and instantiating datapaths and also
    // reading into arrays from plist.
    NSString *datapath1 = [[NSBundle mainBundle] pathForResource:@"myListOne" ofType:@"plist"];
    NSString *datapath2 = [[NSBundle mainBundle] pathForResource:@"myListTwo" ofType:@"plist"];

    myArrayOne = [[NSArray alloc] initWithContentsOfFile:datapath1];
    myArrayTwo = [[NSArray alloc] initWithContentsOfFile:datapath2];
    self.navigationItem.title = @"Hi";
    [super viewDidLoad];
}


#pragma mark - TableView Delegate stuff

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //myNavBar.title = [myArrayOne objectAtIndex:indexPath.row];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

#pragma mark - TableView Datasource stuff

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //returns amount of items inside myArrayOne as amount of rows
    return [myArrayOne count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *myCell = nil;
    myCell = [tableView dequeueReusableCellWithIdentifier:@"myReuseCell"];

    if (myCell == nil)
    {
        myCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myReuseCell"];
    }

    myCell.textLabel.text = [myArrayOne objectAtIndex:indexPath.row];

    return myCell;
}

@end

タイトルを変更する実際のコードは、私が試した 1 つの方法にすぎません...

その他の方法で?また、IB のナビゲーションバーを何かにリンクする必要がありますか?

4

3 に答える 3

2

ナビゲーションコントローラーのないナビゲーションバーがある場合は、それにスタック(この場合は1つのスタック)ナビゲーションアイテムを指定する必要があります。

viewDidLoadビューコントローラで、ビューコントローラのナビゲーションアイテムをスタックに追加します。

self.myNavBar.items = @[self.navigationItem];

これで、次のようにタイトルを設定できます。

self.navigationItem.title = @"Hello"; 

ナビゲーションバーに表示されます。

于 2012-12-15T07:01:13.353 に答える
1

上記の jrturton によるソリューションは、UINavigationBar に UIBarButtonItem (「完了」ボタンなど) がない限り正常に機能します。その場合、提案された解決策により、UIBarButtonItem が非表示になります。

UINavigationBar のタイトルを変更するだけでなく、UIBarButtonItem も保持できるようにする方法を次に示します。

コードに追加IBOutlet UINavigationItem *myNavigationItem;します。

IB のアウトライン ビュー (ストーリーボード ビューではない) で、含まれている UIViewController を右クリックし、UINavigationBar 内の IB によって自動的に作成された UINavigationItem にドラッグし、に接続しmyNavigationItemます。

コードに戻り、追加しますself.myNavigationItem.title = @"Hello";

于 2015-02-12T20:44:24.973 に答える
0

代わりに、このリンクをチェックしてみませんか?

Objective-C でプログラムによって tableView のナビゲーション バーを作成する

アプリのデリゲートにナビゲーション コントローラーが既にある場合は、作成した IBoutlet を削除してから、次を使用する必要があります。

self.navigationItem.title = @"Hi";

これは、アプリのデリゲートで navigationController を参照するためです。

于 2012-12-15T06:36:09.013 に答える