0

所以我试图使用下面显示的代码显示一个UITableView内部UIPopoverController

vc = [[ActionsViewController alloc] init];
initWithContentViewController:vc];
actionsController = [[UIPopoverController alloc] initWithContentViewController:vc];
actionsController.delegate = self;
NSLog(@"Try to sho it ");
[actionsController presentPopoverFromBarButtonItem:(UIBarButtonItem*)sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

这是 ActionsViewController.m 的子类UITableViewController

- (void)viewDidLoad 
{
    [super viewDidLoad];
    NSMutableArray* list = [[NSMutableArray alloc] initWithCapacity:4];
    self.actionList = list;
    self.clearsSelectionOnViewWillAppear = NO;
    self.contentSizeForViewInPopover = CGSizeMake(320.0, 400.0);
    [self.actionList addObject:@"Print as book"];
    [self.actionList addObject:@"Print page"];
    [self.actionList addObject:@"Save Page"];
    [self.actionList addObject:@"Share"];
}
- (int)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"in number of section");
    return 1;
}

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSString* lab = [self.actionList objectAtIndex:indexPath.row];
    NSLog(@"here in there");
    cell.textLabel.text = lab;
    return cell;
}

- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    return [self.actionList count];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.delegate != nil) {
        [self.delegate actionSelected:indexPath.row];
    }
}

对应的.h文件

#import <UIKit/UIKit.h>

@protocol KLActionsViewControllerDelegate
- (void)actionSelected:(NSInteger)index;
@end

@interface KLActionsViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, retain) NSMutableArray* actionList;
@property (nonatomic, assign) id<KLActionsViewControllerDelegate> delegate;


@end

另外,我不认为这些函数cellForRowAtIndexPathnumberOfSectionsInTableView被调用,因为我没有看到任何控制台输出。

编辑:这就是我在弹出窗口中看到的

在此处输入图像描述

4

4 回答 4

0

我想,问题出在这一行:

vc = [[ActionsViewController alloc] init];

如果你有一个 NIB 文件,你应该UIViewController使用它来加载。

vc = [[ActionsViewController alloc] initWithNibName:@"ActionViewController" bundle:nil];
// the NibName must be the exact name of XIB file without extension.

或/与

你应该设置popoverContentSize

[actionController setPopoverContentSize:vc.view.frame.size];

我希望它对你有点帮助。


更新:

看来这不是UIPopoverController问题,只是一个简单的UITableViewController委托问题。

在那一行:

actionsController.delegate = self;

您应该将该类设置为实现UITableViewDelegate. 基本上它UITableViewController本身就像

actionsController.delegate = actionController;

因此,如果您尚未在新委托类所在的地方实现委托回调方法,则不应在这种情况下替换它。self您只是从真正被委托回答回调的类中窃取机会,而在您的新委托类中,您不回答回调。

这就是您看到没有数据的空表的原因。

于 2012-08-19T08:51:38.237 回答
0

UITableViewController 是隐式设置数据源和委托,不需要显式设置数据源和委托。

从 .h 文件中删除 UITableViewDataSource、UITableViewDelegate

 #import <UIKit/UIKit.h>

@protocol KLActionsViewControllerDelegate
 - (void)actionSelected:(NSInteger)index;
@end

  @interface KLActionsViewController : UITableViewController 
 @property (nonatomic, retain) NSMutableArray* actionList;
 @property (nonatomic, assign) id<KLActionsViewControllerDelegate> delegate;


 @end

并删除此行**actionsController.delegate = self;

  vc = [[ActionsViewController alloc] init];
 actionsController = [[UIPopoverController alloc] initWithContentViewController:vc];
  [actionsController presentPopoverFromBarButtonItem:(UIBarButtonItem*)sender  permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
于 2013-09-24T13:13:17.263 回答
0

viewDidLoad我添加self.tableView = [[UITableView alloc] init]

于 2012-08-20T05:23:16.880 回答
0

您需要通过(最后一行 viewdidload 加载表格视图:

 [self.tableView reloadData];
  • 这将触发表视图方法采取行动。在各种 tableview 方法中放置断点,特别是在 - (NSInteger)numberOfRowsInSection:(NSInteger)section { return [self.actionList count]; 如果这没有被调用,你的 tableview 就没有加载。
于 2013-09-24T08:45:18.800 回答