所以我尝试使用下面显示的代码在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
另外,我不认为函数cellForRowAtIndexPath
和numberOfSectionsInTableView
被调用,因为我没有看到任何控制台输出。
编辑:这是我在popover中看到的
:
答案 0 :(得分: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
中实现委托回调方法,则应该不替换此情况。你可以简单地从真正被委派回答回调的类中窃取机会,并且在新的委托类中你不回答回调。
这就是为什么你看到没有数据的空表的原因。
答案 1 :(得分:0)
在viewDidLoad
我添加了self.tableView = [[UITableView alloc] init]
答案 2 :(得分:0)
您需要通过(viewdidload的最后一行:
)加载表格视图 [self.tableView reloadData];
答案 3 :(得分:0)
UITableViewController是隐式set datasource和delegate,不需要显式设置datasource和delegate。
从.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];