2013-02-11 46 views
0

我正在尝试创建将数字输入标签的键盘接口。您可以更轻松地通过键盘输入您的4位数字引脚进行输入,就像打开锁定的iOS设备时一样。如何引用特定标签

我有四个标签,它们会显示一次输入的数字。我有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:@""]; 
    } 
} 

回答

0

这样做的一种方法是将每个标签放入一个NSMutableArray(以及您的视图)。然后获得在setPin每个标签,你可以这样做:

UILabel *label = [labelArray objectAtIndex:currField]; 
[label setText:[NSString stringWithFormat:@"%i", sender.tag]]; 
currField++; 
+0

我总是留下深刻的印象通过这个论坛回答问题的速度。谢谢你们的帮助。我认为将标签放入数组中的概念对我来说是最有意义的,所以我认为我会尝试。 – Typhoon101 2013-02-11 16:45:51

1

您需要稳守引用到textLabels,也许作为一个属性,你是班上

@property (nonatomic) NSArray* textLabels; // Choose a more descriptive name than this 

... 

self.textLabels = @[ char1Label, char2Label, char3Label, char4Label ]; 


... 

- (UILabel*) nextEmptyLabel { 

    for (UILabel* label in self.TextLabels) 
    { 
     NSString* trimmedText = [label.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     if ([trimmedText length] == 0) { 
      return label; 
     } 
    } 

    return nil; // No non empty label found 
} 
+0

可能想修改你的长度检查 - '[[label.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]' – 2013-02-11 16:39:24

相关问题