gpt4 book ai didi

iphone - 以编程方式创建元素并重用代码

转载 作者:行者123 更新时间:2023-11-28 19:24:27 24 4
gpt4 key购买 nike

我需要以编程方式创建多个按钮和标签。大多数情况下,它们将具有相同的属性(不透明、背景颜色、文本颜色),但文本、标签和框架除外。

在尝试限制我需要输入的代码量时,我认为这可行:

// generate generic properties for our buttonsUIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];tempButton.opaque = true;tempButton.backgroundColor = [UIColor whiteColor];tempButton.titleLabel.font = [UIFont fontWithName:@"Helvitica-Bold" size:15];;[tempButton setTitleColor:[UIColor magentaColor] forState:UIControlStateNormal];[tempButton addTarget:self action:@selector(handleButtonTap:) forControlEvents:UIControlEventTouchUpInside];// generate specific button1 properties, assign to ivar, and displaytempButton.frame = CGRectMake(81, 136, 159, 37);tempButton.tag = BUTTON_1_TAG;[tempButton setTitle:@"button 1 title" forState:UIControlStateNormal];self.button1 = tempButton;[self.view addSubview:self.button1];// generate specific button2 properties, assign to ivar, and displaytempButton.frame = CGRectMake(81, 254, 159, 37);tempButton.tag = BUTTON_2_TAG;[tempButton setTitle:@"button 2 title" forState:UIControlStateNormal];self.button2 = tempButton;[self.view addSubview:self.button2];

大多数人都知道,只有最后一个按钮会显示。我认为这是因为我真正做的只是覆盖 tempButton。

是否有一种解决方案可以让我完成我在这里尝试做的事情,而不必为每个元素创建单独的“临时”变量?

此外,我上面的代码似乎存在内存泄漏问题。我的理解是 tempButton 最初是自动释放的,但每次我用它来设置我的 ivar 时,它不会再次保留吗?这样做之后,我是否需要向 tempVar 发送一个 release 以便它回到 1,以便在触发 autorelease 时,它​​实际上会被释放?

感谢您的帮助!

最佳答案

1.) 您正在将一个新的 UIButton 分配给一个临时变量。这只是一项任务。分配不保留,因此您没有内存泄漏。

2.) 你可以制作一个返回部分配置按钮的方法,然后只设置不同的部分:

- (UIButton *)myButton {
UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
tempButton.opaque = true;
tempButton.backgroundColor = [UIColor whiteColor];
tempButton.titleLabel.font = [UIFont fontWithName:@"Helvitica-Bold" size:15];;
[tempButton setTitleColor:[UIColor magentaColor] forState:UIControlStateNormal];
return tempButton;
}


....
IButton *tempButton = [self myButton];
[tempButton setTitle:@"button 1 title" forState:UIControlStateNormal];
tempButton.frame = CGRectMake(81, 136, 159, 37);
[self.view addSubview:tempButton];
tempButton = [self myButton];
tempButton.frame = CGRectMake(81, 254, 159, 37);
[tempButton setTitle:@"button 2 title" forState:UIControlStateNormal];
[self.view addSubview:tempButton];

因为你已经给了你的按钮独特的标签,你不需要分配给像 self.button1, self.button2 这样的 iVArs,你可以只使用 [self.view viewForTag: ] 来检索正确的 subview 。

但是,正如另一个人所说,如果您确实使用了“self.button1 =”,按钮将被保留,您将需要在 dealloc 中释放,并担心调用 -[view didUnload] --如果您不在那里释放,那么您将获得指向 View 中不再存在的按钮的指针。

关于iphone - 以编程方式创建元素并重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com