如何从 uibutton 中获取先前关于标签值的图像和标题?

Posted

技术标签:

【中文标题】如何从 uibutton 中获取先前关于标签值的图像和标题?【英文标题】:How to get previously assign image and title from uibutton with respect to tag value? 【发布时间】:2014-04-04 06:05:54 【问题描述】:

我有一个 UIView,其中

我的 .h 头文件

UIButton *btn;

在我的 .m 实现文件中

    btn = [UIButton buttonWithType:UIButtonTypeCustom];
            CGRect frame = CGRectMake(5,5,circleImage.frame.size.width-10,circleImage.frame.size.height-10);
            [btn setFrame: frame];
    [btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",[GrideImgArray objectAtIndex:count]]] forState:UIControlStateNormal];

        btn.imageView.contentMode = UIViewContentModeCenter;
        [btn setTag:btnTagValue];
 [btn addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        [circleImage addSubview:btn];

在我的按钮点击方法中

-(void)buttonClicked:(UIButton *)sender
     //do something

现在我的问题是我多了一个 uibutton 并且方法是 moreOptionClicked

-(void)MoreOptionOnClick:(UIButton *)sender
UIButton *button = (UIButton *)[self viewWithTag:sender.tag];//same tag as (btn.tag=sender.tag)
NSLog(@"%@",button.titleLabel.text);
NSLog(@"%@",button.imageView.image);

在此方法中,我希望之前分配按钮,即 (btn) 标题和图像,但在 moreOptionClick 这两个 NSLog 方法返回 null

IMP :- btn 标签等于 sender.tag 显示我对两个 uibutton 有相同的标签

任何答案将不胜感激

【问题讨论】:

嗨,我注意到您的代码中有两个问题,一个是您为两个按钮的标签属性分配了相同的值,那么 viewWithTag 方法返回的哪个是不可预测的,另一个是如果您是已经在发件人中获得按钮,那么您为什么要尝试使用 viewWithTag 创建它的引用? @harishmistry 两种方法都不同,我的第一个方法是 buttonClicked:sender,用于第一个 UIButton,我的第二个方法是 MoreOptionClicked:sender,这是我的第二个 UIButton 方法。 好的@Visnu 那么你想在 MoreOptionOnClick: 方法中获取哪个按钮对象? @harishmistry btn 这是我的第一个按钮名称。 @Vishu:你看过我在回答评论中给出的解释了吗? 【参考方案1】:

您可以通过使用此[self.view viewWithTag:1]; 获得 UIButton。 但是您有两个具有相同标签的视图。 您可以为两个不同的 UIButton 设置具有不同符号的相同标签。 对 btn1 说标签 100,对 btn2 说标签 -100。 在您的方法中,您可能会根据按钮标签的符号获得另一个按钮。

[fristbtn setTag:100];
[secondbtn setTag:-100];

在你的方法中。

-(IBAction)MoreOptionOnClick:(UIButton *)sender
//suppose sender is secondbtn.
int iSuperTag=0-sender.tag;//you will get 100.
 UIButton *button = (UIButton *)[self viewWithTag:iSuperTag];
 NSLog(@"%@",button.titleLabel.text);
 NSLog(@"%@",button.imageView.image);

【讨论】:

但我希望两个 uibutton 使用相同的标签。如果两个标签不相同,我如何获得以前的 uibutton 标题和图像值?? 看我是说你设置了相同的标签,不同的是+和-号。相同的值具有不同的符号。因此,当您获得 100 时,您可能会获得 -100 的“viewwithtag”,反之亦然。我希望这可以清除我的解决方案。 但是当我打印 button.titleLAable.text 和 image 时它再次给出(null)?? [fistbtn setTag:100]; [第二个设置标签:-100];然后在我的第二个 btn 方法中,我做了类似 UIButton *button = (UIButton *)[self viewWithTag:-sender.tag]; NSLog(@"%@",button.titleLabel.text); NSLog(@"%@",button.imageView.image); 它给出 [619:207] (null)【参考方案2】:

@Visnu 我尝试了与下面相同的方法,它工作正常,我在您的代码和我的代码中看到的唯一区别是您没有为按钮设置任何标题或图像,我做了。

- (void)viewDidLoad 
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    UIButton *btnA = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnA setBackgroundColor:[UIColor blueColor]];
    [btnA setTitle:@"A" forState:UIControlStateNormal];
    CGRect frameA = CGRectMake(5,5,100,30);
    [btnA setFrame: frameA];
    [btnA setTag:1];
    [btnA addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnA];

    UIButton *btnB = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnB setBackgroundColor:[UIColor blueColor]];
    CGRect frameB = CGRectMake(50,50,100,30);
    [btnB setTitle:@"B" forState:UIControlStateNormal];
    [btnB setFrame: frameB];
    [btnB setTag:2];
    [btnB addTarget:self action:@selector(btnMoreOptionOnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnB];



- (IBAction)buttonClicked:(UIButton *)sender



-(IBAction)btnMoreOptionOnClick:(UIButton *)sender
    UIButton *button = (UIButton *)[self.view viewWithTag:1];
    NSLog(@"%@", button.titleLabel.text);

试试这个代码,它工作正常....

【讨论】:

以上是关于如何从 uibutton 中获取先前关于标签值的图像和标题?的主要内容,如果未能解决你的问题,请参考以下文章

从 UIButton 中获取 UIButton 的标签,该 UIButton 位于此 UIButton 呈现的弹出框中

如何以编程方式更改UIButton标签

如何从 UIButton 操作方法获取 UITableViewCell 对象?

已知如何用标签值更改 UIButton 背景图像?

石墨:显示与先前值的变化

关于标签选择器获取table中的<td>标签中的html值,以及<td>中<input type=‘text‘>中的value值的详解