【问题标题】:How to reference iOS UITextFields如何引用 iOS UITextFields
【发布时间】:2012-01-02 04:31:04
【问题描述】:

我正在创建一个填字游戏类型的应用程序,并使用以下代码制作网格:

- (void) viewDidLoad{
    [...]
    //we are inside 2 loops (puzzleRow and i), 15 rows (puzzleRow), 15 cols (i)...

    UITextField *inputBox = [[UITextField alloc] initWithFrame:letterFrame];
    key = (puzzleRow * 100) + i;
    [inputBox setTag:key];
    [....]
}

稍后,我想引用UITextField 并获取它们的值,将其与正确答案进行检查等。

 - (IBAction)checkSolutionButton:(id)sender {
int i = 1;
for (id obj in self.Puzzle) {
    int len = [obj length];
    for(int j = 0; j < len; j++){
        NSRange range = NSMakeRange(j, 1);
        NSString *answer = [obj substringWithRange:range];
        int key = (i * 100) + j;
        UIView *userGuessSquare = [self.view viewWithTag:key];
        UITextField *userGuessTextField = [userGuessSquare viewWithTag:key];
        NSString *guess = userGuessTextField.text;
        NSLog(@"guess: %@", guess);
    }
}

}

self.Puzzle 是一个NSArray 字符串 (ANSWER1..ANSWER2,​​ANSWER3..ANSWER4),构成填字游戏的行,点是黑色方块。 UIViewUITextField 的持有者,每个UIView 及其UITextField 都有一个相同的密钥。

我在这里卡住了。我收到警告Incompatible pointer types initializing UITextField with an expression type UIView 我以为它是一个子类?

 NSString *guess = userGuessTextField.text;

是不行的。

问题: 我怎样才能制作一堆UITextField(s),然后再访问它们和它们的值?

已编辑以包含整个 IBAction 方法)。

【问题讨论】:

  • 如果您确定从viewWithTag: 返回的视图将始终为UITextField,那么您可以将其显式转换为UITextField 类以使警告静音。

标签: ios cocoa-touch uitextfield


【解决方案1】:

使用标签应该没问题。要获得 UITextField 你应该这样做:

UITextField *userGuessTextField = (UITextField*) [self.view viewWithTag:key];
NSString *guess = userGuessTextField.text;

这会将 UIView 转换为更具体的 UITextField,这没关系,因为您知道您已经使用过它。确保您的标签也从 0 以上开始。

【讨论】:

  • 谢谢。这行得通。最有用的部分是如何施放,实际上,这让我很生气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2019-11-26
  • 2015-03-01
相关资源
最近更新 更多