0

この方法で、UItextField の書き込みを 1.5 秒ごとに変更しようとしています。

-(void)Welcome{

UITextField* WelcomeField = [[UITextField alloc] initWithFrame:CGRectMake(50,230,220,80)];
[self.view addSubview:WelcomeField];
WelcomeField.placeholder = @"Welcome";
WelcomeField.font = [UIFont fontWithName:@"Chalkduster" size:40];
[WelcomeField setBackgroundColor:[UIColor clearColor]];

NSTimer* TimeCounterWelcome = [NSTimer scheduledTimerWithTimeInterval: 1.5 target: self
                                                         selector: @selector(ChangeLanguage:) userInfo: nil repeats: YES];
}

- (IBAction)ChangeLanguage:(id)sender{

WelcomeField.placeholder = @"Goodby";


NSTimer* TimeCounterWelcome = [NSTimer scheduledTimerWithTimeInterval: 1.5 target: self
                                                         selector: @selector(ChangeLanguage2:) userInfo: nil repeats: YES];

}

- (IBAction)ChangeLanguage2:(id)sender{

WelcomeField.placeholder = @"Friend";

}

問題は、単語が 30 個あり、コードを 30 回繰り返すことができないことです。もっと速い方法はありますか?

4

3 に答える 3

1

次のようなものが機能します。

-(void)Welcome{

UITextField* WelcomeField = [[UITextField alloc]initWithFrame:CGRectMake(50,230,220,80)];
[self.view addSubview:WelcomeField];
WelcomeField.placeholder = @"Welcome";
WelcomeField.font = [UIFont fontWithName:@"Chalkduster" size:40];
[WelcomeField setBackgroundColor:[UIColor clearColor]];

// global integer 'wordIndex'
wordIndex = 0;

// global NSArray 'allTheWords'
allTheWords = [NSArray arrayWithObjects:word1, word2, word3, etc., nil];

NSTimer* TimeCounterWelcome = [NSTimer scheduledTimerWithTimeInterval: 1.5 target: self
                                                     selector: @selector(ChangeLanguage:) userInfo: nil repeats: YES];
}

-(void)ChangeLanguage:(id)sender{
    NSString * nextWord = [allTheWords objectAtIndex:wordIndex];
    WelcomeField.placeholder = nextWord;
    wordIndex++;

    // assuming to start from beginnning again
    if(wordIndex >= 30) {
        wordIndex = 0;
    }
}

スタイルに関するちょっとした注意事項: メソッド名と変数名を小文字または大文字で始めてみてください。Objective-C のコーディング ガイドラインに従いたい場合は、そのほうがよいでしょう。

于 2013-08-27T14:30:36.070 に答える
0

はい、もっと良い方法があります。

30 個の単語すべてを保持する配列を定義します。配列をループしている間に、プレースホルダーを設定し、遅延を設定します。

于 2013-08-27T13:42:52.577 に答える
0

30 個の値すべてを保持する NSArray を宣言し、最後の項目に到達するまで 1.5 秒ごとにループします。

for (id object in array) {
    // do something with object
}
于 2013-08-27T13:44:15.133 に答える