番号をラベルに入力するキーパッド インターフェイスを作成しようとしています。ロックされた iOS デバイスの電源を入れるときのように、4 桁の PIN を入力して入力するキーパッドの線に沿って考える方が簡単です。
入力した数字が表示される 4 つのラベルがあります。数字を含む 12 個のボタン (およびキャンセル ボタンと削除ボタン) があります。各ボタンにはタグが割り当てられています。ボタンをクリックすると、そのタグが次の空のラベルへのテキストとして入力されます。
私がする必要があるのは、setPin 関数で次の空のラベルを参照することです。私はこれを間違った方法で行っていますか、それとも私が見逃しているのはほんの少しですか? 私のコードの縮小版を以下に示します。
- (void)viewDidLoad
{
[super viewDidLoad];
[[self view] setBackgroundColor:[UIColor whiteColor]];
[self setCurrField:1];
// BUILD A VIEW TO CONTAIN THE LOGIN PANEL
UIView *pinView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 400, 500)];
pinView.backgroundColor = [UIColor lightGrayColor];
// CREATE BUTTONS
int nPos = 1;
int leftPos;
int topPos = 134;
while (nPos <= 12)
{
leftPos = (nPos%3 == 1) ? 19 : leftPos + 113 + 12;
topPos = (nPos%3 == 1) ? topPos + 61 + 10 : topPos;
// BUILD THE BUTTONS AND ADD TO THE PAGE
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTag:nPos];
[btn addTarget:self action:@selector(setPin:) forControlEvents:UIControlEventTouchUpInside];
[btn setFrame:CGRectMake(leftPos, topPos, 113, 61)];
[btn setBackgroundColor: [UIColor darkGrayColor]];
NSString *btnLabel;
if(nPos <= 9)
{
btnLabel = [NSString stringWithFormat:@"%i", nPos];
}
else
{
switch (nPos) {
case 10:
btnLabel = @"Cancel";
break;
case 11:
btnLabel = @"0";
break;
case 12:
btnLabel = @"Delete";
break;
default:
break;
}
}
[btn setTitle: btnLabel forState:UIControlStateNormal];
[pinView addSubview:btn];
nPos++;
}
// CREATE THE TEXTBOXES
UILabel *char1Label = [[UILabel alloc] initWithFrame:CGRectMake(19, 65, 83, 91)];
UILabel *char2Label = [[UILabel alloc] initWithFrame:CGRectMake(113, 65, 83, 91)];
UILabel *char3Label = [[UILabel alloc] initWithFrame:CGRectMake(207, 65, 83, 91)];
UILabel *char4Label = [[UILabel alloc] initWithFrame:CGRectMake(301, 65, 83, 91)];
[pinView addSubview:char1Label];
[pinView addSubview:char2Label];
[pinView addSubview:char3Label];
[pinView addSubview:char4Label];
[[self view] addSubview:pinView];
}
-(void)setPin:(UIButton *)sender
{
if(sender.tag <= 9 || sender.tag == 11)
{
[--charLabel[self currField]Label-- setText:[sender tag]];
[self currField++];
}
elseif(sender.tag == 12)
{
[self currField--];
[--charLabel[self currField]Label-- setText:@""];
}
}