获取 UIButton 按下的内容
Posted
技术标签:
【中文标题】获取 UIButton 按下的内容【英文标题】:getting the contents of UIButton press 【发布时间】:2014-05-14 01:38:45 【问题描述】:我不确定以前是否有人问过这个问题,但无论如何我都会问。我正在研究一个按钮网格,每个按钮的标题都是字母。我从一个数组中获取这些字母的内容,我相信这就是我的问题所在。标题看起来很好,但是当我按下阵列中的任何按钮时,这就是我的问题所在。
每按一个字母,我的 NSLog NSLog(@"Letter Added to Array: %@", self.sectionButton.titleLabel.text);
部分就会显示
Letter Added to Array: S
这就是显示的全部内容。不管按什么按钮。我想这可能只是因为S
是我数组中的最后一个对象,这就是它这么说的原因。我不知道,所以任何帮助将不胜感激。
这是我的代码:
- (void) didTouchButton
[self.lettersPressedArray addObject:self.sectionButton.titleLabel.text];
NSLog(@"Letter Added to Array: %@", self.sectionButton.titleLabel.text);
NSLog(@"Letters Pressed = %@", self.lettersPressedArray);
- (void)showGridWithRows:(int)r columns:(int)c arrayOfContent:(NSArray *)content withSizeOfContent:(CGFloat)contentSize
for (int i = 0; i < content.count; i++)
// vars
int row = (int)i / r; // to figure out the rows
int col = i % c; // to figure out the columns
float x = 0;
float y = 0;
// sizing options
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
CGSize screen = [UIScreen mainScreen].bounds.size;
if (screen.height == 480)
x = 1 + (40 * col);
y = 1 + (30 * row);
else
x = 2 + (40 * col);
y = 1 + (31 * row);
else
x = .5 + (90 * col);
y = 1 + (90 * row);
//button
self.sectionButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.sectionButton setTintColor:[UIColor lightGrayColor]];
self.sectionButton.frame = CGRectMake(x, y, contentSize, contentSize);
self.sectionButton.tag = 100 + row * c + col;
[self.sectionButton addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside];
// font stuff
self.sectionButton.titleLabel.textAlignment = NSTextAlignmentCenter;
self.sectionButton.titleLabel.backgroundColor = [UIColor clearColor];
self.sectionButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Light" size:22];
[self.sectionButton setTitleColor:[UIColor blackColor]/*[UIColor colorWithRed:241.0/255.0 green:124.0/255.0 blue:22.0/255.0 alpha:1.0]*/ forState:UIControlStateNormal];
// title
s = (NSString *)[content objectAtIndex:i];
[self.sectionButton setTitle:s forState:UIControlStateNormal];
// color
if ([s isEqualToString:@"A"] )
[self.sectionButton setBackgroundColor:[UIColor greenColor]];
else if([s isEqualToString:@"Z"])
[self.sectionButton setBackgroundColor:[UIColor redColor]];
else
[self.sectionButton setBackgroundColor:[UIColor lightGrayColor]];
//layer
self.sectionButton.layer.borderWidth = .65;
//self.sectionButton.layer.cornerRadius = 5.0;
for(int j = 0; j < c; j++)
for (int k = 0; k < r; k++)
[self addSubview:self.sectionButton];
【问题讨论】:
【参考方案1】:改变这个:
- (void) didTouchButton
[self.lettersPressedArray addObject:self.sectionButton.titleLabel.text];
NSLog(@"Letter Added to Array: %@", self.sectionButton.titleLabel.text);
NSLog(@"Letters Pressed = %@", self.lettersPressedArray);
到这里:
- (void) didTouchButton:(UIButton *)sender
[self.lettersPressedArray addObject:sender.titleLabel.text];
NSLog(@"Letter Added to Array: %@", sender.titleLabel.text);
NSLog(@"Letters Pressed = %@", self.lettersPressedArray);
当你分配你的按钮选择器时,添加一个':'
所以,这个:
@selector(didTouchButton)
将是:
@selector(didTouchButton:)
可能实现如下:
[someButton addTarget:self action:@selector(didTouchButton:) forControlEvents:UIControlEventTouchUpInside];
因为:
您最初通过self.selectionButton.titleLabel.text
引用按钮的方式是访问按钮的一个特定实例。这意味着无论哪个按钮触发didTouchButton
,它都会获得self.selectionButton
的内容,我假设它显示一个“S”。这意味着无论发生什么,您都将更多的字母“S”添加到您的数组中。通过像我们一样配置我们的操作方法,它将“self”作为参数传递。这意味着我们有一个变量代表方法中调用该方法的人。我们将使用它来获取我们的内容并将它们添加到数组中。
【讨论】:
感谢您的建议!我会改的【参考方案2】:在这里做一些事情。首先,您可能不希望按钮成为一个属性,因为您不断地覆盖它并最终留下它引用您创建的最后一个...您基本上所做的与以下内容相同:
int x = 1; x = 2; x = 3;
打印 x 总是会导致 3... 有意义吗?
解决您的问题的方法是将您正在点击的按钮作为 参数 传递给处理该操作的函数,方法是在“didTouchButton”之后添加一个“:”并更改您的方式创建该功能。创建按钮时,在函数名称后添加 : ,如下所示:
[button addTarget:self action:@selector(didTouchButton:) forControlEvents:UIControlEventTouchUpInside];
这允许将按下的按钮的引用传递给函数,因此您可以这样做来处理它:
- (void)didTouchButton:(UIButton *)button
NSString *titleOfPressedButton = button.titleLabel.text;
【讨论】:
非常感谢!实际上我曾经有一次,但我认为它最终不需要它。我错了哈哈,但再次感谢! 不用担心,很高兴为您提供帮助!【参考方案3】:您需要更改didTouchButton
方法以接受(id)sender
参数,并在创建didTouchButton:
按钮时更改设置选择器的方式。
这样您将在 didTouchButton 内收到一个按钮对象指针,并能够获取其信息。
【讨论】:
以上是关于获取 UIButton 按下的内容的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OBJECTIVE C 的 UITableViewCell 中更改先前按下的 UIButton 标签?