2009-08-04 19 views
5

私は初心者のiPhone開発者です。 私のコードは以下の通りです:ツールバーのUILabel(UIBarButtonItem)のテキストをプログラムで変更する

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UILabel *lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
lblTotCaratteri.font = [UIFont italicSystemFontOfSize:13.0]; 
lblTotCaratteri.textColor = [UIColor greenColor]; 
lblTotCaratteri.backgroundColor = [UIColor clearColor]; 
lblTotCaratteri.adjustsFontSizeToFitWidth = YES; 
lblTotCaratteri.text = @"0"; 

UIBarButtonItem *lblCaratteri = [[UIBarButtonItem alloc] initWithCustomView: lblTotCaratteri]; 

inserimentoToolbar.items = [NSArray arrayWithObjects:fixedSpace, lblCaratteri, fixedSpace, nil]; 

だから、私の見解で、私はUITextViewやプログラムで作成されたこのツールバーを持っています。 UITextViewに文字を追加するたびに、ラベルのテキストを変更したいと思います。 UITextViewのテキストが変更されるたびに、各キーが押されたというアラートを表示することができます。 ラベルのテキストを変更する方法がわかりません。 私は自分のシナリオを説明してくれることを願っています。 私の英語は申し訳ありません。 Greetings、Luca。

+2

lblTotCaratteriへの参照はありますか?そうでなければ、あなたの@interfaceで宣言してください。もしそうなら、UILabel *(上記2行目)で再宣言しないでください。次に、lblTotCaratteri.text = @ "newtexthere"を呼び出すことができます。 – mjhoy

+0

それは働いた!私はそれをインターフェイスに追加しましたが、もちろんそれを再宣言しませんでした。 あなたのコメントを回答としてマークするにはどうすればよいですか? もう一度おねがいします! – crash

+0

あなたの変数はfixedSpaceと呼ばれていますが、その値は実際にはFlexibleSpaceです。それはミスキーですか? – mk12

答えて

6

一つの方法は、inserimentoToolbarがあなたのインタフェースで宣言されたと仮定すると、次のようになります。

[(UILabel *)[[toolbar.items objectAtIndex:1] view] setText:@"sometext"]; 

これは実際には(オブジェクトの面で)変更されませんあなたのツールバーを想定して動作します。

OR

より理想的な解決策は、(あなたのヘッダファイルで)あなたのインタフェースでlblTotCaratteriを置くことであろう。同様に:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

次に、あなたの含まれるコードは、ちょうど

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
// etc etc etc 

のようにその後の任意の時点で、ちょうど

lblTotCaratteri.text = @"sometext"; 
+0

申し訳ありませんが、私は基本的に2番目の部分で答えを書き直しました。以前は見たことがありませんでした。 – Neil

+0

前にコメントしたように、インターフェイスにラベルを追加して、どこにでも必要な場所で呼び出しました。 お返事ありがとうございます。 – crash

5

を使用する。これは私のために働いたヨ、私はUIBarButtonItemのタイトルを変更します同じUIBarButtonItemをクリックします。私の必要性は一種のフリップフロップでした。初めてクリックすると「MyText1」と表示され、もう一度クリックするとタイトルが「MyText2」に変わります。ユーザーがボタンをクリックするとテキストが切り替わります。

-(IBAction)myBarButtonItem:(id)item{ 

if(flag){ 
    flag=FALSE; 
    [(UIBarButtonItem *)item setTitle:@"MyText1"]; 
} 
else{ 
    flag=TRUE; 
    [(UIBarButtonItem *)item setTitle:@"MyText2"]; 
} 

注:プログラムでUIBarButtonItemを作成していません。私はInterface Builderで作成し、メソッド "myBarButtonItem"の参照をこのボタンに設定しました。したがって、UIBarButtonItemまたはこのタイプのボタンを押すと、メソッド "myBarButtonItem"が呼び出され、パラメータのボタンの参照がパラメータとして渡され、さらに(UIBarButtonItem *)にキャストされ、setTitleプロパティを使用してテキストまたはタイトルが変更されます。

***メソッドのシグニチャを に宣言してください。ヘッダーファイルに - (IBAction)myBarButtonItem:(id)item;

+0

'。テキストは存在しないようですが、 '.title'はありません。 – Roger

+0

私はプログラム的には機能しませんでした。 –

関連する問題