与更改UIButton背景图像问题

问题描述:

我有下面的代码基本上只是初始化一个UIButton。与更改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"]]; 
} 

的问题是,当应用程序第一最初加载,我必须按两次按钮才能使背景更改..为什么会这样?第一次点击按钮时,这不会改变按钮背景图像。任何想法?

+0

如果我是正确的,setBackgroundImage:forState:方法是一种配置方法,所以在初始化UIButton时设置一次就足以让它为所有声明的状态更改图像。此外,永远不要使用alloc init的setter,它会执行一个双重初始化,这会导致一个泄漏,或者你可以设置一个autorelease UIButton来避免泄漏。 (self.button = [[[UIButton alloc] init] autorelease]; –

+0

你似乎是在选择器中设置了“UIControlStateNormal”的“Selected”图像,默认的UIButton并没有真正的选择功能 什么是它你希望发生? – EricLeaf

+0

所以按钮的初始背景颜色是红色,当我点击我希望它是蓝色和蓝色.. – adit

我不确定问题出在哪里,但是我首先使用+buttonWithType而不是+alloc-init来创建按钮。 buttonType属性是只读的,并且使用-init初始化该按钮不会让您设置类型。

+0

我以前做过,它并没有帮助 – adit

您应该在用户点击按钮之前设置突出显示/选定的背景。换句话说,将前两行从操作方法移到创建按钮的位置。

+0

y ..我也这样做了并且它仍然是同样的事情,不得不点击按钮来获得效果 – adit