UIButton没有出现在iOS Today Widget上

时间:2015-05-18 21:51:44

标签: ios objective-c uitableview uibutton widget

我正在为我的应用创建今天的扩展程序,但有一些我无法理解的错误:

第一: 故事板上的一切都很好,但按钮没有出现在小部件上。

第二:当tableview有多个单元格时,最后一个单元格会被剪切。

第三:调用CellForRow,但不要更改单元格上的任何内容(Label仍然是“Label”)。

http://i.stack.imgur.com/Jp31V.png

这是我的Widget代码:

@implementation TodayViewController{

    NSMutableArray *listaFavoritos;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.widgetTableView.delegate = self;
    self.widgetTableView.dataSource = self;

    [self updateTableView];

    self.preferredContentSize = self.widgetTableView.frame.size;
}

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    // Perform any setup necessary in order to update the view.

    // If an error is encountered, use NCUpdateResultFailed
    // If there's no update required, use NCUpdateResultNoData
    // If there's an update, use NCUpdateResultNewData

    completionHandler(NCUpdateResultNewData);
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(userDefaultsDidChange:)
                                                     name:NSUserDefaultsDidChangeNotification
                                                   object:nil];
    }
    return self;
}

- (void)userDefaultsDidChange:(NSNotification *)notification {
    [self updateTableView];
}

- (void)updateTableView {
    listaFavoritos = [[NSMutableArray alloc] init];
    //listaFavoritos = [[self readArrayWithCustomObjFromUserDefaults:@"listaFavs"] mutableCopy];
    [listaFavoritos addObject:@"test1"];
    [listaFavoritos addObject:@"test2"];
    NSLog(@"%@", listaFavoritos);
}

-(NSArray *)readArrayWithCustomObjFromUserDefaults:(NSString*)keyName
{
    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.kazoowa.timers"];
    NSData *data = [sharedDefaults objectForKey:keyName];
    NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    [sharedDefaults synchronize];
    return myArray;
}

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [listaFavoritos count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    WidgetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WidgetCell" forIndexPath:indexPath];

    if (cell == nil)
    {
        cell.nomeTimer.text = [listaFavoritos objectAtIndex:indexPath.row];
    }

    NSLog(@"CellForRow");

    return cell;
}

2 个答案:

答案 0 :(得分:0)

1)对于第二个问题,tableView:cellForRowAtIndexPath中的cellIdentifier将是“静态”的,如下所示:

static NSString *cellName = @"WidgetCell";
WidgetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName forIndexPath:indexPath];

2)这种情况永远不会执行,因为它永远不会是:

if (cell == nil)
    {
        cell.nomeTimer.text = [listaFavoritos objectAtIndex:indexPath.row];
    }

替换它:

if (cell != nil)
    {
        cell.nomeTimer.text = [listaFavoritos objectAtIndex:indexPath.row];
    }

3)请使用Pragma Mark正确分开您的代码,如下所示:

   #pragma mark-UITableViewDataSource

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

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

        return [listaFavoritos count];
    }

    #pragma mark-UITableViewDelegate

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        WidgetTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WidgetCell" forIndexPath:indexPath];

        if (cell == nil)
        {
            cell.nomeTimer.text = [listaFavoritos objectAtIndex:indexPath.row];
        }

        NSLog(@"CellForRow");

        return cell;
    }

希望有所帮助:)

答案 1 :(得分:0)

试一试:

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellName = @"WidgetCell";


    WidgetTableViewCell *cell = (WidgetTableViewCell *)[theTableView dequeueReusableCellWithIdentifier:cellName];
    if (cell == nil) {
        cell = [[WidgetTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
    }

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

    return cell;
}