如何在铸造控制器上更改UIButton图像

时间:2011-03-24 04:32:40

标签: iphone cocoa ios

我正在尝试在转换控制器上设置字段和按钮图像。我可以成功更改标题字段和详细信息文本字段,但按钮根本不会更改。

- (void)prepareController:(MLSViewController *)controller forRow:(NSUInteger)row {
    AdvancedTableItem *item = [self.tableItems objectAtIndex:row];
    EditLocationViewController *castedController = (EditLocationViewController *)controller;
    castedController.titleText = item.text;
    castedController.detailsText = item.details;
    castedController.isDefaultLocation = (defaultItem == item);
    [castedController.iconButton setImage:[UIImage imageNamed:item.icon] forState:UIControlStateNormal ];
}

我确实测试了item.icon是否正确填充,然后在casted控制器的按钮上调用setImage并且它是正确的。

简而言之,此代码适用于titleText和detailsText更改但不适用于按钮图像。

有任何线索吗?

1 个答案:

答案 0 :(得分:1)

有几件事可能是错的。我会做以下事情:

  1. 预先创建图像并确保已加载
  2. 确保iconButton(我假设是IBOutlet)已链接
  3. 确保在显示View后调用此方法,否则IBOutlets未设置但我认为是这种情况,否则标题也不会出现。)
  4. 这就是我在你的方法中所做的:

    - (void)prepareController:(MLSViewController *)controller forRow:(NSUInteger)row {
        AdvancedTableItem *item = [self.tableItems objectAtIndex:row];
        NSLog( @"Item from table: %@", item );
        EditLocationViewController *castedController = (EditLocationViewController *)controller;
        NSLog( @"Controller: %@", castedController );
        castedController.titleText = item.text;
        castedController.detailsText = item.details;
        castedController.isDefaultLocation = (defaultItem == item);
        NSLog( @"Icon Name: %@", item.icon );
        UIImage *icon = [UIImage imageNamed:item.icon];
        NSLog( @"Icon Image: %@, icon button on controller: %@", castedController.iconButton );
        [castedController.iconButton setImage:icon forState:UIControlStateNormal ];
    }
    

    确保所有值都不是NIL(尤其是图标和iconButton)。

    当处理iPhone / iOS中的问题时,NSLog是你的朋友,嵌套的调用是你的敌人。仅仅因为变量是NIL并不意味着应用程序会抱怨它。它可能会忽略它。