我刚开始学习如何在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
并将其高度设置为300px。但我得不到任何回报。小部件出现空白。
答案 0 :(得分:11)
最可能的原因是,您今天的扩展程序需要通过为self.preferredContentSize
分配值来指定其UI所需的空间。在您的情况下,这是(表行数)*(每行的高度)的高度,宽度为通知中心提供的任何宽度。在viewDidLoad
中你需要这样的东西:
self.preferredContentSize = CGSizeMake(self.preferredContentSize.width, nameArray.count * 44.0);
假设单元格高度为44,在您的情况下看起来是正确的。
如果数组的大小发生变化,则需要为preferredContentSize
分配一个新值。