Виджет просмотра iOS8 сегодня не показывает UITableViewController

Я только начал учиться создавать виджеты сегодняшнего просмотра на iOS8. Я создал новую цель для расширения. Следующим шагом я удалил стандартные viewcontroller и классы и создал новый UITableViewController и соответствующие методы. Я реализовал следующее:

#import "TableViewController.h"
#import <NotificationCenter/NotificationCenter.h>

   @interface TableViewController () <NCWidgetProviding>
{
    NSArray *nameArray;
}
@end

@implementation TableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    nameArray = [[NSArray alloc]initWithObjects:@"joey",@"jack",@"jill", nil];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 3;
}

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {


    completionHandler(NCUpdateResultNewData);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    cell.textLabel.text = [nameArray objectAtIndex:indexPath.row];

    return cell;
}

Я также изменил размер таблицы на freeform и установил ее высоту на 300 пикселей. Но я ничего не получаю взамен. Виджет появляется пустым.


person Rashid    schedule 22.11.2014    source источник


Ответы (1)


Наиболее вероятная причина заключается в том, что вашему сегодняшнему расширению необходимо указать, сколько места ему нужно для пользовательского интерфейса, присвоив значение self.preferredContentSize. В вашем случае это высота (количество строк таблицы) * (высота на строку) с шириной, которую дает вам центр уведомлений. В вашем viewDidLoad вам нужно что-то вроде этого:

self.preferredContentSize = CGSizeMake(self.preferredContentSize.width, nameArray.count * 44.0);

Это предполагает высоту ячейки 44, что выглядит правильно в вашем случае.

Если размер массива когда-либо изменится, вам нужно присвоить новое значение preferredContentSize.

person Tom Harrington    schedule 25.11.2014
comment
Большое спасибо Том! Очень точный и полезный ответ. - person Rashid; 25.11.2014