簡體   English   中英

UIButton沒有出現在iOS Today小部件上

[英]UIButton doesn't appear on iOS Today Widget

我正在為我的應用創建今天的擴展程序,但是有一些我不太理解的錯誤:

首先:故事板上的一切正常,但是按鈕未顯示在小部件上。

第二:當表視圖有多個單元格時,最后一個單元格被剪切。

第三:調用CellForRow,但不要更改單元格上的任何內容(Label仍為“ Label”)。

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

這是我的小部件代碼:

@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;
}

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;
    }

希望能幫助到你 :)

試試吧 :

- (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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM