我试图创建一个包含相同属性的变量的新实例'另一个变量的值。
我不能像在下面的代码中那样直接分配它们,因为在这种情况下,它们都将指向相同的内存地址。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
UITextField * newTextField = [UITextField new];
newTextField = textField; // the problem goes here ( same memory address )
[self.view addSubview:newTextField];
[textField resignFirstResponder];
[textField removeFromSuperview];
}
我通过自己设置每个属性来找到一种不切实际的方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
UITextField * newTextField = [[UITextField alloc] initWithFrame:textField.frame];
newTextField.font = textField.font;
newTextField.text = textField.text;
newTextField.textColor = textField.textColor;
newTextField.textAlignment = textField.textAlignment;
newTextField.center = textField.center;
// ...
// ...
}
但在这种情况下,我必须将每个单独的属性设置为新实例,我发现这是不切实际的。
在没有更改新变量的内存地址的情况下,没有更好的方法将旧变量设置为新变量。
答案 0 :(得分:0)
要做到这一点,你必须继承UITextField并使你的子类符合NSCopying协议,为此你必须在你的UITextField子类中实现copyWithZone方法。