2010-12-20 10 views
0

iphone開発に新しい、それについてたくさんの読書をした後、まだUIViewがどのように正しく動作するかを把握しようとしています。私はこれを使って遊んでいましたが、私はこれまでのところです:Objective-c初心者 - UIViewsのヘルプが必要

ビューベースのアプリケーションを使って新しいxcodeプロジェクトを作成しました。私は自分のMMAppViewControllerクラスを持っていて、 "Level1View"という新しいUIViewControllerサブクラスを作成しました。

「Level1」というタイトルのボタンがあり、「Level1View」viewControllerに移動します。このviewControllerには、「次へ」ボタン、「メインメニュー」ボタン(MMAppViewControllerに戻る)、そして現在「レベル1」というタイトルのラベルがあります。

私の問題は、ラベルのタイトルを変更するために使用したコードが機能しないことです。誰がなぜこれが分かっていますか?ここに私のコードです:

@class MMAppViewController; 

@interface MMAppAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    MMAppViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet MMAppViewController *viewController; 

@end 

@implementation MMAppViewController 

-(IBAction)pushLevel1{ 

    Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:level1View animated:YES]; 
} 
... 

#import <UIKit/UIKit.h> 


@interface Level1View : UIViewController { 
    IBOutlet UILabel *labelTitle; 

} 
-(IBAction)pushBack; 
-(IBAction)pushNext; 
@end 

と現在

#import "Level1View.h" 
    #import "MMAppViewController.h" 


    @implementation Level1View 

    -(IBAction)pushBack{ 

     MMAppViewController *MainView = [[MMAppViewController alloc] initWithNibName:nil bundle:nil]; 
     [self presentModalViewController:MainView animated:YES]; 

    } 
    -(IBAction)pushNext{ 

     [labelTitle setText:(@"Thanks for playing :)")]; 

    } 

    - (void)didReceiveMemoryWarning { 
    ... 

アプリの実行が、私がヒットしたときにラベルが文句を言わない変更」 「次へ」ボタンをクリックします。誰も助けることができますか?

答えて

0

Level1ViewのLabelTitleアウトレットにInterface Builderのラベルをバインドしましたか?

この手順を忘れた場合、アウトレットは機能しません。数年後でも、私はこのステップを時々忘れる。

--Mike

+0

ええ、私はインターフェイスビルダーでラベルを接続していないし、それはなぜ動作しませんでした!愚かな間違い。ありがとう!質問に答えるときは、答えたと印を付ける方法がありますか?私はちょうど最も適切な答えのチェックをクリックして推測していますか? –

1

確かにUINavigationControllerは、あなたがやりたい仕事のためのより良いツールではありませんか?これにより、UIViewオブジェクトのスタックを簡単に管理できます。

つまり、あなたのpushNextメソッドが呼び出されるようにログを追加しようとしましたか? labelTitleはどこに宣言されていますか?あなたはXIBを使いましたか?

+0

私は2つのレベルでクイズゲームを作成しています。メインメニューでは、レベル1またはレベル2を選択できます。私はnavigationControllerを試してみましたが、混乱してしまいました。これは私のために働いているようですので、その間にそれに固執します。 ロギングとは何ですか、ヘッダーファイルにUIButtonsを宣言していますか? labelTitleは、Level1Viewヘッダーファイルで宣言されています。私はボタン/ラベルを追加するためにインターフェイスビルダーを使用しました。 –

+0

Level1Viewヘッダーファイルに役立つ場合は追加しました。 このコードは、「nextButton」コードに追加すると動作しますが、背景を変更します。 self.view.backgroundColor = [UIColor redColor]; –

+0

Interface Builderでラベルを接続するのを忘れてしまったようです。 –

0

あなたはIBでラベルを接続してもよろしいですか?あなたがメインビューからアクセスできLevel1View.h

、あなたがプロパティを設定する場合は、「@property (nonatomic, retain) IBOutlet UILabel *labelTitle;」:

:あなたは再びメインビューコントローラを提示してはならない

Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil]; 
[self presentModalViewController:level1View animated:YES]; 
level1View.labelTitle.text = @"something"; 
[level1View release]; 

他の事ではなくてLevel1Viewを解任します

@implementation Level1View 
    -(IBAction)pushBack{ 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

// 、多分問題はあなたが例えばをロードするペン先を指定する必要がある[[Level1View alloc] initWithNibName:nil bundle:nil][[Level1View alloc] initWithNibName:@"Level1View" bundle:nil]

+0

Interface Builderでラベルを接続するのを忘れてしまったようです。愚かな間違い。ありがとう! –

+0

[self dismissModalViewControllerAnimated:YES]を忘れないでください。アドバイス –

+0

私はそれを私のpushBackメソッドの最後の行として追加しました。なぜこれが必要なのかわかりませんが、これはメモリ割り当てと関係していますか?再び、私は客観的なCとiphoneの開発に新しい、まだ学習。 –

0

あなたのヘッダファイルでプロパティとしてlabelTitleを宣言し、そしてあなた.MでlabelTitleを合成 - 限りlabelTitleはあなたのコードの残りの部分は結構です、インタフェースビルダーを通じてフックアップされます。

.h 
@property (nonatomic, retain) IBOutlet UILabel *labelTitle; 

.m 
@synthesize labelTitle; 

セッターコールが機能します。実行時にsetterメソッドとgetterメソッドを作成するプロパティの合成

change 
[labelTitle setText:(@"Thanks for playing :)")]; 
to 
labelTitle.text = @"Thanks for playing :)"; 

(あなたにもそれを使用することができますので、また、ドット表記は、合成された性質のために動作します)。 Read:The Objective-C Programming Language

+0

Interface Builderでラベルを接続するのを忘れてしまったようです。愚かな間違い。ありがとう! –

関連する問題