-1

MainClassCustomCellクラスでは、2つのビューCustomCellがあり、のサブビューですMainClass。このようなカスタムセルクラスにボタンがあります

_(IBAction)click:sender

{
NSUInteger no =2;
second-class *sc = [[secondclass alloc] init];
[sc numberOfItem:no];
}

メインクラスで変更したいボタンをクリックするとlabel、私のメインクラスのコーディングは

-(void)nuberofitem:no
{
NSLog(@"number : %d",no); //Its show correct value
localtextbox.text = no;

NSLog(@"text box value : %@",localtextbox.text); //But in  label it shows null value

}

私のXIBデザイン、

ここに画像の説明を入力

このようなデザイン画面がありますが、実行時には次のような画面があります

ここに画像の説明を入力

これには、名前とプラスとマイナスのボタンを備えたビューがあり、実行時に名前1、名前2、名前3などがあります。プラス ボタンをクリックすると、値が 1 から ... に増加し、カウント ラベルが表示されます。マイナス ボタンをクリックすると、カウント ラベルの値が減少します。お願いします。

4

3 に答える 3

2

コードは、次のメソッドでテキスト フィールドを更新できません。

-(void)nuberofitem:no
{
NSLog(@"number : %d",no); //Its show correct value
localtextbox.text = no; // THIS IS WHERE YOU WENT WRONG

NSLog(@"text box value : %@",localtextbox.text); //But in  label it shows null value

}

localtextbox.text は、NSString オブジェクトを渡す必要がある UITextField または Label のプロパティです。NSUInteger オブジェクトを渡していますが、これは間違った型のオブジェクトであるため、コンパイルによって「nil」として読み取られます。何が起こっているのかをよりよく理解するには、コンパイラのようにコードを読む必要があります。

コンピューターがコードを読み取る方法は次のとおり
です。 1. アプリケーションは、ユーザーがそのインターフェイスと対話したかどうかを確認するために継続的にループします (イベント ループ)
2. ユーザーがインターフェイス (.xib) ファイルのボタンをクリックします
3.ボタンが押されたことを通知するために、イベント ループが一時停止します。Xcode の開発者には見えない xml 情報を調べ、その 'target' プロパティを調べます。このターゲット プロパティは、「セレクター」へのポインターを保持します (IBAction メソッドの単なる装飾的な言葉 です_(IBAction)click:sender) 。NSUInteger が宣言され、次の値に設定されます: 2 b. あなたのインスタンス



second-class割り当てられ、インスタンス化されます (このインスタンスはsecond-class、この場合は名前が付けられたタイプの使用可能なオブジェクトですsc)
c. クラス 'second-class' の 'sc' インスタンスはメソッド

5 を呼び出します。-(void) numberOfItem:(NSUInteger )no値 2 を含む変数 'no' を渡すメソッドに入ります (実際にはピース メモリへの参照ですが、リテラル値と考えることができます 2)。
6. コンパイラは最初の NSLog ステートメントにヒットし、'%d' フォーマッタを NSUInteger 値に置き換えます (これが、この特定のフォーマッタが動作するように設計されている方法です)。7. コンパイラはlocaltextbox.text = [NSString stringWithFormat:@"%d",no];、'stringWithFormat' メソッドを使用して NSUInteger に到達し、NSString に変換します。これは非常に重要です。それ以外の場合、localtextbox.text は nil のままになります。

これまでのところすべてが完璧です。次の Cocoa と Cocoa Touch では、インターフェイス ビルダーを適切に使用してインターフェイスを構築すれば、いくつかの作業を行います。

Xcode には、開発環境のルールに従っている限り、多くの作業を行うメカニズムが組み込まれています。ラベルは、「テキスト」プロパティが変更された場合に自動的に更新され、この変更はすぐに行われますが、textField またはラベルを IBOutlet として宣言した場合に限ります (コードで、または Interface Builder と Connections インスペクターを使用してこれを行うことができます)。ラベルを IBOutlet に設定することは、textField またはラベルに「ラベル、'text' プロパティが変更された場合は、その変更を反映するようにビューを更新してください」と指示するようなものです。変更を監視するように明示的に指示したか、ユーザーに表示されるものに関して変更が重要ではないとラベルが考えています。

ラベルを IBOutlet として適切に設定した場合、コードは localtextbox.text プロパティが変更されたときにビューを自動的に更新し、次の行に進み、とにかく localtextbox.text プロパティの値を適切に記録します。

Connections Inspector で Connections に再度アクセスする必要があります。次の手順に従います (誤って間違った接続を開始する場合は簡単です)。
ラベル/テキストフィールド接続
の切断 1. プロジェクトの .xib ファイルを開きます。
2. 画面の右側で、Xcode が次のように設定されていることを確認します
ここに画像の説明を入力
。 3. .xib ファイルで、ラベルまたはテキストフィールド (いずれか) を選択します。
4. label/textField が選択されている間に、画面の右側に移動し、Identity Inspector パネルの上部ツールバーの右端のオプションを選択します (マウスをツールの上に置くと、ツール ヒントが表示されます)。右向きの矢印が内側にある円である「接続インスペクター」と表示されます。
ここに画像の説明を入力
5. label/textField が選択されている状態で (これらの接続は、選択したインターフェイス オブジェクトに基づいて変更されます)、すべての接続を削除します。最も重要なのは、「参照アウトレット」です。

LABEL/TEXTFIELDの再接続
1. Xcode レイアウトをアシスタント エディター モードに変更
ここに画像の説明を入力
します。
3. Main.h ファイルに一連の中かっこを追加して、コードが次のようになるようにします。

#import <UIKit/UIKit.h>

@interface Main : UIViewController {


}

@end

4. ラベルの上にマウスを置き、ラベル/テキストフィールドからこれらの中括弧の間の領域までコントロールドラッグして離します (これを行うと、青い線が表示されます)。そのようです:

ここに画像の説明を入力

写真のように、「Create Outlet or Outlet Collection」というメッセージが表示されます。アウトレット (IBOutlet) を作成します。フォームを離すと、ポップアップが表示されます。connection: 'Outlet' を選択し、textfield:localtextfield の名前を付けて、参照が 'Weak' であることを確認します。5. [
ここに画像の説明を入力
接続] をクリックすると、既に述べた他のすべてが機能すると仮定して、コードが機能するはずです。

これは UITableViewCell のサブクラスですか? その場合は、アクション メソッドを呼び出し[[self tableview] reloadData];て、テーブルビューのセルを手動で更新できます。

それでも機能しない場合はお知らせください。

于 2013-04-17T12:33:50.510 に答える
1

あなたの完全なプロジェクトを見たので、あなたがいくつかの iOS 規則を破っていることがわかります。心配する必要はありません。ここに簡単な修正がありますが、これを達成するためのより正しい方法があることを理解してください。

次のコードを sampleViewController.m に追加します。

// At the top near the other import statements
#import 'ViewController'

-(void)viewWillAppear:(BOOL)animated {

    // Update the count in the text box when the view appears
    [self updateTableCount];

}

// Custom Method for updating the display text of the property counttxt.text
- (void) updateTableCount {

    NSLog(@"Updating Table Count");

    // Get the count of records in the name array
    int numberOfNames = [[Table_viewctrl addlist_array] count];

    counttxt.text = [NSString stringWithFormat:@"%d", numberOfNames];
}

次のメソッドを更新します。

- (IBAction)add_namebtn:(id)sender 
{
    if(self.name_singleton != NULL)
    {
        selectname *sample_name = [[selectname alloc]init];
        sample_name.name = [nametxt text];
        [name_singleton Add:sample_name];

        nametxt.text=@"";
        [self.view endEditing:YES];

        // Update the count in the text box when the user adds a new name to the array
        [self updateTableCount];
    }
}

- (IBAction)viewlist_btn:(id)sender 
{
    self.Table_viewctrl = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    Table_viewctrl.view.frame = CGRectMake(0, 0, 320, 363);
    [self.subview addSubview:self.Table_viewctrl.view];
    [self loadnames];
    self.backbtn.hidden=FALSE;

    // Update the count in the text box when the view appears
    [self updateTableCount];
}

数日以内にこの回答を更新し、iOS ガイドラインに従ってアプリケーションを適切に設計する方法について説明します。説明の半分くらいですが、説明することがたくさんあります。これらの一時的な変更を適用した後、もう一度確認してください。ユーザーが「リストの表示」ボタンを押すまで、更新されたカウントは表示されません。これは、「リストの表示」ボタンが選択されるまで、アプリが実際に追加された名前を 'add list_array に移動しないためです。次回の投稿では、この問題を修正し、UINavigationBar を使用して適切なタイプの構造でアプリケーションをセットアップします。

于 2013-04-22T07:22:31.580 に答える