0

我有一个包含 UIButton 的自定义 UITableViewCell,并且单元格本身响应 UIControlEventTouchUpInside。该单元格在 iPhone 模拟器和所有版本的 iPhone(iPhone5 除外)中的行为应如此。出于某种原因,在 iPhone5 上,单元格仅响应单元格最底部的触摸。事实上,用户要真正让单元格对触摸做出响应是极其困难的,他们必须在单元格底部附近多次点击才能使其响应。此外,UIButton 在 iPhone5 上根本没有响应。我还应该补充一点,这个错误只是在应用程序经过优化以适应 iPhone5 更大的视网膜屏幕后才开始发生的。我倾向于认为这与单元格的大小有关,但它在 iPhone 5 上的外观看起来与它应该的完全一样。我还尝试通过创建一个单独的 NIB 来解决这个问题,以便在使用 iPhone5 时进行实例化,这利用了“自动布局”界面生成器功能,但这并没有解决任何问题。

这是在 ViewController.m 中实例化自定义 UITableView 单元格的代码:

// Configure the cell...
switch (indexPath.section) {
    case 0:                 // Full name
    {

        UINib *nib = [UINib nibWithNibName:@"ProfileNameCell" bundle:nil];

        cell = [[nib instantiateWithOwner:nil options:nil] objectAtIndex:0];

        [[(ProfileNameCell *)cell nameLabel] setText:[NSString stringWithFormat:@"%@ %@",
                                                      [[[Engine sharedInstance] currentUser] firstname],
                                                      [[[Engine sharedInstance] currentUser] lastname]]];

        [[(ProfileNameCell *)cell imageButton] addTarget:self
                                                  action:@selector(selectUserPhoto:)
                                        forControlEvents:UIControlEventTouchUpInside];


        if ([[[Engine sharedInstance] currentUser] photoURL] != nil) {
            [(ProfileNameCell *)cell setImageForURL:
                [NSURL URLWithString:[[[Engine sharedInstance] currentUser] photoURL]]];
        }

        break;
    }...

这是 View.m 的代码:

@implementation ProfileNameCell

@synthesize imageView=imageView_;
@synthesize imageButton;
@synthesize nameLabel;

- (void)awakeFromNib {

   [(CALayer *)[self.imageView layer] setCornerRadius:5.0];
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {
    // Initialization code.
    [(CALayer *)[imageView_ layer] setCornerRadius:5.0];
}

    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

     [super setSelected:selected animated:animated];

     // Configure the view for the selected state.
 }


 - (void)setImageForURL:(NSURL *)url { 
      [NSThread performBlockInBackground:^{

          //Code that is executed when the UIButton is pressed...   
   }

 - (void)dealloc {
    [imageView_ release];
    [imageButton release];
    [nameLabel release];
        [super dealloc];
 }


 @end
4

1 回答 1

1

听起来像是自动调整包含单元格的表视图的超级视图大小的问题(不是单元格本身,也可能不是表视图)。检查所有视图是否自动调整大小或在代码中调整大小以利用全部可用高度。您还可以在显示单元格时添加断点 ( tableView:didEndDisplayingCell:forRowAtIndexPath:),然后使用 gdb 调查超级视图及其框架 ( po [cell superview])。

于 2013-05-15T19:56:45.707 回答