2011-01-20 3 views
1

У меня есть класс, который простирается от UIView. Я использовал это для создания пользовательского представления по умолчанию. Я использую -(id)initWithFrame:(CGRect)frame;, но когда я использовал инициализатор, параметр frame всегда равен null.переопределяет UIView: initWithFrame и получил нулевые параметры

Вот код:

#import "SomeView.h" 
@implementation POIView 
@synthesize theButton; 

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
    NSLog(@"%@",frame); 
    } 
    return self; 
} 
@end 

Результат NSLog всегда (null), и это, где я назвал инициализацию

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *CellIdentifier = @"CELL_ID"; 
const int THE_TAG   = 1000; 

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    CGRect *rect = CGRectMake(0, 0, tableView.frame.size.width,tableView.rowHeight); 
    someView = [[SomeView alloc] initWithFrame:rect]; 
}else{ 
    someView = (SomeView *) [cell viewWithTag:THE_TAG]; 
} 
return cell; 
} 

Я использовал его теперь на Tableview, но я использовал некоторые взгляды на некоторые UILabel тоже.

+0

Пожалуйста, покажите нам код, где вы называете 'initWithFrame:'. –

+0

done, я добавил источник, где я вызываю 'initWithFrame' – Suprie

ответ

1

frame - это структура, это не подкласс из NSObject. Вы можете показать значение кадра следующим образом.

NSLog(@"%.2f %.2f %.2f %.2f",frame.origin.x, frame.origin.y, frame.size.width, frame.size.height); 

NSLog (@ "% @", aObj); равен NSLog (@ "% @", [aObj описание]);

+1

. Намного проще показать значение с помощью' NSStringFromCGRect() '. Это, однако, не решило бы эту проблему, так как кадр все еще «null». – klaaspieter

+0

По-видимому, это проблема, после того как я изменил ее на NSLog (@ "% f", frame.size.width). В конце концов, параметр не был «нулем». Спасибо – Suprie

+1

@klaaspieter: вы правы. NSStringFromCGRect() проще. Но основная проблема заключается в том, что CGRect происходит из typedef struct {...}. Это не подкласс NSObject. Таким образом, он не имеет метода описания (NSString *). Потому что это не экземпляр NSObject. – AechoLiu

0

Проблема, которую я вижу, заключается в том, что CGRectMake имеет тип возврата CGRect, а не CGRect *. Таким образом, линия:

CGRect *rect = CGRectMake(0, 0, tableView.frame.size.width,tableView.rowHeight); 

должен быть

CGRect rect = CGRectMake(0, 0, tableView.frame.size.width,tableView.rowHeight); 
Смежные вопросы