2013-05-15 1 views
0

У меня есть пользовательский UITableViewCell, который содержит UIButton, и сама ячейка отвечает на UIControlEventTouchUpInside. Ячейка ведет себя как в симуляторе iPhone, так и во всех версиях iPhone EXCEPT для iPhone5. По какой-то причине, на iPhone5, ячейка реагирует только на касания в самой нижней части ячейки. На самом деле пользователю чрезвычайно сложно на самом деле заставить клетку реагировать на прикосновение, они должны многократно нажимать возле нижней части ячейки, чтобы заставить ее ответить. Кроме того, UIButton просто не отвечает вообще на iPhone5. Я также должен добавить, что эта ошибка началась только после того, как приложение было оптимизировано для соответствия экрану сетчатки iPhone5. Я склонен полагать, что это имеет какое-то отношение к размеру ячейки, но ее появление на iPhone 5 выглядит так, как должно. Я также попытался исправить эту проблему, создав отдельный NIB для создания экземпляра, когда используется iPhone5, который использует функцию «Auto-layout» Interface Builder, но это ничего не решило.Пользовательский пользовательский сенсорный ответ UITableViewCell только на iPhone5

Вот код, который instatiates ячейку пользовательского UITableView в ViewController.m:

// 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 

ответ

1

Похоже, проблема с автоматическое изменение размера представления в виде таблицы, содержащего ячейку (а не сама ячейка и, возможно, не представление таблицы). Убедитесь, что все виды автоматически изменяются или изменяются в коде, чтобы использовать полную доступную высоту. Вы также можете добавить точку останова, когда ячейка отображается (tableView:didEndDisplayingCell:forRowAtIndexPath:), а затем использовать gdb для исследования супервизоров и их кадров (po [cell superview]).

+0

Спасибо! Вот и все! –