2014-11-22 3 views
3

Я только начал изучать, как создавать виджеты сегодняшнего вида на iOS8. Я создал новую цель для расширения. На следующем шаге я удалил по умолчанию viewcontroller и классы и создал новый UITableViewController и соответствующие методы. Я осуществил следующее:iOS8 сегодня виджет представления не отображается 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 и установить его высоту 300px. Но я ничего не получаю взамен. Виджет выглядит пустым.

ответ

10

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

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

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

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

+0

Спасибо большое! Очень точный и полезный ответ. – user3687

Смежные вопросы