2

我有一个使用 XiB 在 iOS4 中开发的应用程序。我让它在 iOS6.1 及更早版本上运行良好。但是对于某些按钮,如果是 iPhone 和 iOS 7.0,则不会调用 IBAction。它也适用于 iPad 和 iOS 7.0。当然,我在 iPhone 和 iPad 上使用不同的 Xib。这是代码。这是非常基本的。但只是没有进入它。

- (IBAction) didReceiveMapButtonPress {
   NSLog(@"IN DID RECEIVE MAP BUTTON PRESS");
   if ([self wasReferredFromMap]) {
    [[self navigationController] popViewControllerAnimated:YES];
   } else {
    [self pushMapViewController];
   }
  }
4

3 回答 3

4

许多开发人员使用自定义视图在旧版本 iOS 的表格视图中显示自定义单元格。如果您是其中之一,那么您将不得不面对一个问题,即您的按钮单击操作将不再适用于 iOS7。

如何解决这个问题:

你有三个选择:

选项 1:使用新表格单元创建新布局,而不是查看。并将所有布局再次放入表格单元格中。

我知道,这需要付出很多努力。如果您不想这样做,我们有一个非常小的 hack:选项 2

选项 2:为您的按钮创建一个 IBOutlet 并将此按钮添加为单元格内容视图的子视图。

[self.myCell.contentView addSubview:self.btn_click];

上面的代码行将 btn_click 添加为内容视图的子视图。现在按钮点击动作应该可以工作了。

选项 3:

最好的办法 :

i) 取一个插座 UITableViewCell。ii) 将现有视图作为新表格单元格的子视图。iii) 断开自定义单元与现有视图的连接,并将其连接到新的 UITableViewCell。

就是这样,您的 IBAction 现在可以工作了。

可能是您遇到了错误消息“类不是键值编码 - 兼容”的崩溃。. 检查您的旧视图连接并删除所有带有黄色标记的连接。

于 2013-09-30T14:09:45.590 回答
0

请确保您的 TCell.xibUITableViewCell是正确的。

仔细检查此 xib 文件是否具有“内容视图”。如果你看不到这个项目,那意味着你的视图不是a UITableViewCell,它可能是a UIView

正确的方法是重新创建这个 XIB 文件。你可以这样做:

  1. 新文件(用户界面)--->空--->设备系列(iphone)--->另存为TCell.xib。
  2. 添加UITableViewCell
  3. 将您以前的 xib 文件中的子视图复制到此视图并连接插座。http://i.stack.imgur.com/WB4j3.png
于 2013-10-14T06:04:34.480 回答
0

当我遇到这个问题时,我有大量来自 xibs 的单元格。这就是我为 UITableViewCell 创建类别的方式

@implementation UITableViewCell (customs)

- (void)awakeFromNib {
    [super awakeFromNib];
    [self reAddSubviews];
}

- (void)reAddSubviews {
    for (UIView * o_vw in [[[self subviews] objectAtIndex:0] subviews]) {
        if (o_vw != self.contentView) {

            [o_vw removeFromSuperview];
            [self.contentView addSubview:o_vw];
        }
    }
}

@end
于 2013-10-31T16:17:17.133 回答