私のアプリへのログインにピンスクリーンを使用しています。ピンスクリーンは、4つのラベルと隠れたテキストフィールドで構成されています。ユーザーがキーパッドを使用してテキストを入力すると、記号でラベルを更新します。これは正常に動作しますが、ログインが始まる前に最後のラベルが実際に更新されず、ログイン処理が完了しても空のままになります。iosでラベルが更新された後にアクションを実行します
これらはコードの関連するビットです:
//an observer has been added elsewhere
- (void)textDidChange:(NSNotification *)notification
{
UITextField *field = [notification object];
if (field == inputField)
{
NSString *newText = field.text;
if ([newText length] <= pinLength) [self updatePINDisplay];
}
}
-(void)updatePINDisplay
{
if ([pinText length] > pinLength) return;
for (NSInteger ii = 0; ii < [pinText length]; ii++)
{
UILabel *label = [pinFields objectAtIndex:ii];
[label setText:@"x"];
}
for (NSInteger ii = [pinText length]; ii < pinLength; ii++)
{
UILabel *label = [pinFields objectAtIndex:ii];
[label setText:[NSString string]];
}
if ([pinText length] == pinLength) [self login];
}
[自己ログイン]は、最後のピンのラベルが更新される前に起こる他のプロセスを起動するので、最後のボックスがまだある間、ログインが発生したため、問題が発生します空の。
私は
[self performSelector:@selector(login) withObject:nil afterDelay:0.1]
で
[self login]
を置き換えることによって、問題を回避してきましたが、私は、任意の時間遅延を好きではありません。私は、ラベルが描かれた後に私のログインコードを起動するために使える代理メソッドがあったと思っていました。ような何か:
-(void)labelDidGetDrawn
その他(非ハック)ソリューションを:-)
おかげも歓迎されます!問題は、第四項目が[self login]
終了後まで描かれないということであるように、あなたの記述に基づいて
[label setNeedsDisplay:YES];
if ([pinText length] == pinLength) [self login];