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 の好みであるコードを使用してラベルを作成する必要がないためです。これを覚えておいてください。