Iphone 以编程方式调用iAction方法不会更改按钮的背景?

Iphone 以编程方式调用iAction方法不会更改按钮的背景?,iphone,ios,ipad,uibutton,Iphone,Ios,Ipad,Uibutton,我有一个应用程序,在其中我向滚动视图添加了一些动态数量的按钮。我为ui按钮设置了一个普通背景并选择了背景。出于某些原因,我需要通过以下方式以编程方式调用ui按钮sender方法: [self buttontapped:nil]; 如下所示,但使用代码不会更改按钮的背景: button.selected = YES; 我最初设置了按钮的背景如下: btn = [UIButton buttonWithType:UIButtonTypeCustom]; int j = i+1;

我有一个应用程序,在其中我向滚动视图添加了一些动态数量的按钮。我为
ui按钮设置了一个普通背景并选择了背景。出于某些原因,我需要通过以下方式以编程方式调用
ui按钮
sender方法:

[self buttontapped:nil];
如下所示,但使用代码不会更改按钮的背景:

button.selected = YES;
我最初设置了按钮的背景如下:

    btn = [UIButton buttonWithType:UIButtonTypeCustom];
    int j = i+1;
    btn.frame = CGRectMake((j-1)*77, 0, 77, 44);
    [btn setBackgroundImage:[UIImage imageNamed:@"bar.png"] forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:@"bar_hvr.png"] forState:UIControlStateSelected];
    btn.selected = NO;
    btn.backgroundColor = [UIColor clearColor];
    btn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    btn.titleLabel.textColor = [UIColor whiteColor];

    [btn setTitle:head forState:UIControlStateNormal];
    btn.tag = i;
    [tabBarS addSubview:btn];

-(void)buttonTapped:(id)sender {
    if(sender==nil)
    {
        btn.tag=0;
    }

    for(int i=0;i<[sarray count];i++)
    {
           btn.selected=NO;  
     }
    btn = (UIButton *)sender;
    NSLog(@"Tab bar %d is clicked",btn.tag);
    [self tabCall:btn.tag];
    btn.selected = YES; 
}
btn=[UIButton按钮类型:UIButtonTypeCustom];
int j=i+1;
btn.frame=CGRectMake((j-1)*77,0,77,44);
[btn setBackgroundImage:[UIImage ImageName:@“bar.png”]用于状态:UIControlStateNormal];
[btn setBackgroundImage:[UIImage ImageName:@“bar_hvr.png”]用于状态:UIControlStateSelected];
btn.selected=否;
btn.backgroundColor=[UIColor clearColor];
btn.titleLabel.font=[UIFont fontWithName:@“Helvetica Bold”大小:14];
btn.titleLabel.textColor=[UIColor whiteColor];
[btn setTitle:状态头:UIControlStateNormal];
btn.tag=i;
[选项卡栏添加子视图:btn];
-(无效)按钮:(id)发送者{
如果(发送方==nil)
{
btn.tag=0;
}

对于(int i=0;i在按钮操作中

   btn.selected=YES;
最后一行使按钮始终处于选定状态

还可以按如下方式获取正确的实例:

btn=(UIButton *)sender;

首先写下这一行,并将方法类型从
void
更改为
iAction

btn = (UIButton *)sender;
像贝娄一样

-(IBAction)buttonTapped:(id)sender {

    btn = (UIButton *)sender;
    if(sender==nil)
    {
     btn.tag=0;
    }

    for(int i=0;i<[sarray count];i++)
    {
       [btn setSelected:NO];
     }
    NSLog(@"Tab bar %d is clicked",btn.tag);
    [self tabCall:btn.tag];
    [btn setSelected:YES];
}
-(iAction)按钮已添加:(id)发件人{
btn=(UIButton*)发送方;
如果(发送方==nil)
{
btn.tag=0;
}

对于(int i=0;i您需要设置图像属性,而不是
ui按钮的
backgroundImage
属性。 使用
默认
图像属性和
所选
属性

[btn setSelected:TRUE];

您正在打印的日志是否正确打印button.tag


NSLog(@“单击了选项卡栏%d”,btn.tag);

我使用了下面的方法调用UIButton方法,如下所示:-

btn= [UIButton buttonWithType:UIButtonTypeCustom];
    int j=i+1;
    btn.frame = CGRectMake((j-1)*77, 0, 77, 44);
    [btn setBackgroundImage:[UIImage imageNamed:@"bar.png"] forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:@"bar_hvr.png"] forState:UIControlStateSelected];
    btn.selected=NO;
    [btn addTarget:self action:@selector(yourButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    btn.backgroundColor = [UIColor clearColor];
    btn.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
    btn.titleLabel.textColor = [UIColor whiteColor];


    btn.tag = i;
    [tabBarS addSubview:btn];
它的操作方法应该与发送方类似

-(IBAction)yourButtonAction:(id)sender
{
    UIButton *btn = (UIButton*)sender;

    if (![btn isSelected])
    {
        [btn setImage:[UIImage imageNamed:@"selected_fb_btn.png"] forState:UIControlStateNormal];
        [btn setSelected:YES];

        [self login];
    }
    else{
        [btn setImage:[UIImage imageNamed:@"facebook.png"] forState:UIControlStateNormal];
        [btn setSelected:NO];

    }

}
编辑

您可以使用以下trik编程调用按钮动作事件:-


[btn sendActionsForControlEvents:UIControlEventTouchUpInside];

发件人值未正确输入我想是的。我怀疑btn持有其他按钮的实例不是所需的实例。尝试调试它。更改iAction而不是-(void)按钮标记:(id)发件人。在设置Select if(btn.selected)后检查按钮的状态你在哪里设置背景?是否已经创建并连接了
btn
?我需要执行第一个按钮的选择过程需要通过编程完成?是因为发件人为零吗?@hacker使用自定义按钮代码查看此链接,并使用该代码代替你的:)而不是此
-(iAction)YourButton操作:(id)发送者
我们可以假设像
-(iAction)yourButtonAction:(UIButton*)发送者
也对吗?无需在本地创建一个按钮:)尝试精细编程按钮事件[btn SendActions ForControlEvents:UIControlEventTouchUpInside];您只需要强制转换它以避免编译器警告。只要
sender
响应
selected
方法,这不是问题的原因。