按标签设置按钮的图像(来自数组)

时间:2015-12-29 14:26:15

标签: ios objective-c uibutton

我在constructor(props) { super(props); this.state = { fieldName : this.props.fieldname}; } componentWillMount() { //this.state.fieldName = this.props.fieldname; //this.forceUpdate(); } updateState(evt) { //this.setState( {fieldName : evt.target.value} ); this.props.onChange( evt.target.id, evt.target.value ); } render() { return ( <div className={this.props.divClass}> <hr /> <label> {this.props.labelName} </label> <div>{this.props.fieldName}</div> <div>{this.state.fieldName}</div> <input type="text" id={this.props.id} value={this.props.fieldName} onChange={this.updateState.bind(this)} className="form-control" /> </div> ) } 方法中有一系列图像,如下所示:

viewDidLoad

此数组包含图像名称。 我在images = [NSArray arrayWithObjects:@"make_fun.png", @"smile-2.png", @"cream_happy_ice.png", @"big_smile.png", @"fun.png", @"happy_santaclaus", @"make_fun.png", @"smile-2.png", @"cream_happy_ice.png", @"big_smile.png", @"fun.png", @"happy_santaclaus",nil]; 上还有12个按钮,我标记了从0到11的所有按钮。

我想要实现的内容非常简单 - 当用户点击其中一个按钮时,其标签用作images阵列中的索引以设置按钮的背景。这是我的代码:

storyboard

但是我在编辑器中遇到了这个错误:

- (IBAction)onClickButton:(id)sender {
    UIButton *button = (UIButton*)sender;

   [button setImage:[UIImage imageNamed:[images objectAtIndex:[sender tag]] forState:UIControlStateNormal];  

}

我看了很多关于stackoverflow的问题我无法找到解决方案。

感谢!!!

4 个答案:

答案 0 :(得分:2)

尝试这种方式,使用[sender tag]代替- (IBAction)onClickButton:(id)sender { UIButton *button = (UIButton*)sender; [button setImage:[UIImage imageNamed:images[button tag]] forState:UIControlStateNormal]; }

--proving comm over *
*comm : ∀ a b → (a * b) ≡ (b * a)
*comm zero b = sym (rightId* b)
*comm (suc a) b = {!!}

答案 1 :(得分:0)

试试这个。在按钮上使用标记而不是发件人。它可能会帮助你。

- (IBAction)onClickButton:(id)sender {

    UIButton *button = (UIButton*)sender;
   [button setImage:[UIImage imageNamed:[images objectAtIndex:[button tag]] forState:UIControlStateNormal];  

}

答案 2 :(得分:0)

问题是id的通用类型sender不知道属性tag
一个简单的解决方案是使用UIButton作为参数类型

- (IBAction)onClickButton:(UIButton *)button {
   button.image = [UIImage imageNamed:images[button.tag] forState:UIControlStateNormal];  
}

和点符号避免了一堆括号。

答案 3 :(得分:0)

首先确保UIImage实例不是nil

UIImage *image = [UIImage imageNamed:[images objectAtIndex:[button tag]];
if (image) {
    [button setImage:[UIImage imageNamed:[images objectAtIndex:[sender tag]] forState:UIControlStateNormal];  
} else {
    // something is wrong with the image you are trying to assign. 
}

如果图片确实存在,请尝试在界面构建器中将按钮类型从System更改为Custom