【发布时间】:2011-09-25 05:47:49
【问题描述】:
我有以下代码,基本上只是初始化一个 UIButton。
self.button = [[UIButton alloc] init];
self.button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
self.button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
[self.voteSpot setBackgroundImage:buttonImage forState:UIControlStateNormal];
[self.voteSpot setBackgroundImage:[UIImage imageNamed:@"MainButton-Selected.png"] forState:UIControlStateSelected];
[self.button addTarget:self action:@selector(button) forControlEvents:UIControlEventTouchUpInside];
CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
if (heightDifference < 0)
self.button.center = self.tabBar.center;
else
{
CGPoint center = self.tabBar.center;
center.y = center.y - heightDifference/2.0;
self.button.center = center;
}
[self.view addSubview:self.button];
当我按下按钮时,我希望更改按钮背景,因此在目标中我有以下内容:
- (void) button
{
[self setSelectedViewController:[self.viewControllers objectAtIndex:1]];
[self setTabBarWithImage:[UIImage imageNamed:@"Map-Profile.png"]];
}
问题是,当应用程序首次加载时,我必须按两次按钮才能更改背景。这是为什么呢?我第一次点击按钮时,这不会更改按钮背景图像。有什么想法吗?
【问题讨论】:
-
如果我是对的,setBackgroundImage:forState: 方法是一种配置方法,因此在初始化 UIButton 时设置一次就足以更改所有声明状态的图像。此外,永远不要将 setter 与 alloc init 一起使用,它会进行双重初始化,从而导致泄漏,或者您可以设置一个自动释放 UIButton 以避免泄漏。 (self.button = [[[UIButton alloc] init] autorelease];
-
您似乎在选择器中为
UIControlStateNormal设置“已选择”图像。默认的 UIButton 并没有任何选定的功能。你希望发生什么? -
所以当我点击时按钮的初始背景颜色是红色我希望它是蓝色和蓝色..
标签: iphone objective-c ipad uibutton