0

こんにちは皆さん!私はxcodeとobjective-cに非常に慣れていませんが、長い間C#でプログラミングしてきました。私はXcodeを使い始めたばかりで、アプリの作成を任されていて、迷子になっています。

5つのUILabelと5つの値を持つ配列があります。配列のすべての値が使用されるまで、UILabelに配列の値をランダムにロードしてもらいたいです。

ダイナミックラベルを作成することはできますが、それらを正しく並べるのは面倒です。必要に応じて行いますが、objective-c(C#では簡単です)を使用してそれを行う方法がわかりません。

ありがとう!

4

2 に答える 2

4

私が理解できることから、配列があり、5 つの文字列が必要で、ラベルにランダムに表示したいですか? 私はあなたがこのようにすることができると思います:

-(void)fillLabel {

int random = arc4random() % 5; //random value from 0-4
yourLabel.text = [NSString stringWithFormat:@"%@",[yourArray objectAtIndex:random]];

}

あなたはそれを呼び出すことができます

[セルフフィルラベル];

同じクラスなら。

于 2012-07-30T15:42:18.097 に答える
1

SO へようこそ。ここは、XCode と Objective-C の学習に役立つ素晴らしい場所です。

これを行うにはいくつかの方法がありますので、解決策の例を 1 つだけ示します。

実際に NIB(.xib) ファイルでラベルを作成し、それらをコード内の変数にリンクすることができます。これにより、プログラムでラベルを作成しなくても簡単にアクセスできます。これを行う方法は次のとおりです。

ViewController.h

@interface ViewController : UIViewController
{
    //Some Variables
}

@property (nonatomic, strong) NSMutableArray *stringValues;

@property (nonatomic, strong) IBOutlet UILabel *randLabel1;
@property (nonatomic, strong) IBOutlet UILabel *randLabel2;
@property (nonatomic, strong) IBOutlet UILabel *randLabel3;
@property (nonatomic, strong) IBOutlet UILabel *randLabel4;
@property (nonatomic, strong) IBOutlet UILabel *randLabel5;

ここで重要なのは、.h ファイルでラベルが IBOutlets として宣言されていることです。これにより、.xib ファイルに移動し、配置したラベルをコード内の変数にリンクできます。ラベルをリンクするには、コントロール キーを押したままビュー コントローラーにドラッグして放します。5 つのラベルをリストするメニューが表示され、適切なラベルを選択できます。

次に、ランダムな文字列を選択してラベルにロードするには、次の方法でそれを行うことができます。

ViewController.m 


-(void)selectLabelValue: 
{
    for(int i = 5; i > 0; i--)
    {
        randIdx = arc4random() % i;
        switch (i):
        case 1:
            Label1.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];            
        case 2:
            Label2.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 3:
            Label3.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 4:
            Label4.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 5: 
            Label5.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        default:
            NSLog(@"Error, index out of bounds, there is no label for this value!";
}

上記のアイデアは、5 つのラベルを反復処理し、その際にインデックスをランダムに生成して、読み込む文字列を選択するというものです。文字列をロードした後、可能な文字列から削除して、重複しないようにします。私は頭のてっぺんからそれらを行ったので、配列操作の関数名を再確認します。したがって、それらが100%正しいとは確信していませんが、それらが行うべきことを行うものは存在します。

とにかく、お役に立てば幸いです。質問がある場合はコメントを残してください。できる限りお答えします。

編集:誰かがスキミングしていて、リチャードのコメントを読んでいない場合に備えて。彼は、上記で switch ステートメントを使用することは設計が不適切であり、プログラムでラベルを作成する際に配列を使用して処理する必要があるという有効な点を提起しています。このようにして、配列インデックスを介して必要なラベルを簡単に選択できます。これは非常にクリーンなソリューションであり、上記よりも望ましい方法です。スイッチを使用した唯一の理由は、この方法では、user1221399 の好みであるコードを使用してラベルを作成する必要がないためです。これを覚えておいてください。

于 2012-07-30T15:58:29.427 に答える