我希望我能在一个小问题上得到一些帮助。
我的应用程序UI的一部分是动态的,所以我以编程方式添加UI元素,然后存储在NSMutableArray中。我有两个问题:
1)当我尝试执行以下操作时,为什么会得到空值?
UITextField* field = [self.uiElementsForWorkItems objectAtIndex:i];
NSLog(@"title: %@", field.text);
如果这些是有价值的副本而不是引用,为什么我能够成功调用它们的removeFromSuperview?
2)如何从以编程方式添加的UI元素(即UITextField.text值)中检索值,并且有一种方法可以让我识别它是哪个元素?
我已经看到了以下解决方案,但它没有提供访问元素数据或识别它的方法:
[title addTarget:self action:@selector(handlerMethod) forControlEvents:UIControlEventEditingDidEnd];
答案 0 :(得分:0)
尝试使用UITextField.tag属性,在不使用数组的情况下调用特定元素。 (通过调用
确保标记是唯一的) UITextField *field = (UITextField *)[self viewWithTag: tagValue];
尝试使用UITextField委托方法。大多数情况下,您可以使用代理和标签进行管理。
答案 1 :(得分:0)
为什么在尝试执行以下操作时会获得空值?
可能是因为field
是零。如果field
指向真正的UITextField,则会从field.text
获得一个(可能为空)字符串。如果它指向没有text
访问者的东西,那么你就会崩溃。如果我们知道self.uiElementsForWorkItems
是如何形成的以及它包含的内容,它会有所帮助。
如何从以编程方式添加的UI元素中检索值
与任何其他UI元素相同:您向其发送一条消息,询问您想要的数据。为了发送消息,您需要一个指向该对象的指针。如果您以编程方式创建这些UI对象,则需要在创建每个对象时保留对每个对象的引用(类似于IBOutlet),或者为自己提供一种在以后查找对象的方法,例如分配唯一对象值为tag
属性。