Загрузить строку из NIB в UIPickerView viewForRow - PullRequest
1 голос
/ 24 августа 2009

Я хотел бы создать довольно сложную строку в моем UIPicker. Все примеры, которые я видел, создают вид с нуля примерно так ...

- (UIView *) pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent: (NSInteger)component reusingView:(UIView *)view
{
    CGRect cellFrame = CGRectMake(0.0, 0.0, 110.0, 32.0);
    UIView *newView = [[[UIView alloc] initWithFrame:cellFrame] autorelease];
    newView.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0];
    return newView;
}

Это в основном работает, показывает фиолетовый прямоугольник в моей сборщике.

Но я бы хотел иметь возможность загружать элемент pickerView из файла NIB, например ...

- (UIView *) pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent: (NSInteger)component reusingView:(UIView *)oldView
{

   NSArray * nibs = [[NSBundle mainBundle] loadNibNamed:@"ExpenseItem" owner:self options:nil];
   UIView *newView = [nibs objectAtIndex:0];
   return newView;
}

Это приводит к пустому белому экрану, который больше не показывает сборщик. Я могу просто сделать это первым способом и выстроить свои подпредставления в коде, но здесь, очевидно, происходит что-то, чего я не понимаю. Кто-нибудь знает?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Положите ячейку в собственное перо

@interface
    IBOutlet UITableViewCell *cellFactory;


@implementation
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"];
    if(nil == cell) {
        [[NSBundle mainBundle] loadNibNamed:@"LapCell" owner:self options:nil];
        cell = [cellFactory retain]; // get the object loadNibNamed has just created into cellFactory
        cellFactory = nil; // make sure this can't be re-used accidentally
    }
1 голос
/ 24 января 2012

Я бы предпочел создать ячейку внутри ресурса .xib в качестве первого элемента, а затем ссылаться на него так:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"];
if(!cell) 
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed: cellNibName owner: nil options: nil];
    cell = [nib objectAtIndex: 0];
}

Это устраняет зависимость наличия ресурса ячейки, требующего знания контроллера таблицы (выход cellFactory) , что упрощает повторное использование ячейки в нескольких контроллерах.

...