j.g*_*ima 5 objective-c uitableview viewdidload ios
我一直在关注这个教程,有一个幻灯片菜单.我添加了一个TableViewController,它将显示文章列表.由于某种原因,viewDidLoad
没有开火.
在本教程中SideViewController
,控制将显示哪个控制器,如果具有segue
标识符"showPhoto",它将加载特定图像.
// Set the photo if it navigates to the PhotoView
if ([segue.identifier isEqualToString:@"showPhoto"]) {
PhotoViewController *photoController = (PhotoViewController*)segue.destinationViewController;
NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.jpg", [menuItems objectAtIndex:indexPath.row]];
photoController.photoFilename = photoFilename;
}
Run Code Online (Sandbox Code Playgroud)
我想为重新创建同样的东西,TableViewController
并尝试强制viewDidLoad
控制器,如此处所示强制viewDidLoad在iOS上触发,但它仍然无法正常工作:
if ([segue.identifier isEqualToString:@"showList"]) {
TableViewController *tableController = (TableViewController*)segue.destinationViewController;
[tableController view];
}
Run Code Online (Sandbox Code Playgroud)
TableViewController viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
// Change button color
_sidebarButton.tintColor = [UIColor colorWithWhite:0.1f alpha:0.9f];
// Set the side bar button action. When it's tapped, it'll show up the sidebar.
_sidebarButton.target = self.revealViewController;
_sidebarButton.action = @selector(revealToggle:);
// Set the gesture
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
// Set this view controller object as the delegate and data source for the table view
self.listTableView.delegate = self;
self.listTableView.dataSource = self;
// Create array object and assign it to _feedItems variable
_feedItems = [[NSArray alloc] init];
// Create new HomeModel object and assign it to _homeModel variable
_homeModel = [[HomeModel alloc] init];
// Set this view controller object as the delegate for the home model object
_homeModel.delegate = self;
// Call the download items method of the home model object
[_homeModel downloadItems];
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,正在使用的其他两个控制器(PhotoViewController
和MapViewController
)按预期工作......可能有一些设置而不是我缺少的.
我刚刚开始在iOS上,不幸的是无法解决这个问题.
有多个问题TableViewController
(根据您共享的项目档案)
@interface TableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, HomeModelProtocol>
@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;
@property (weak, nonatomic) IBOutlet UITableView *listTableView;
@end
Run Code Online (Sandbox Code Playgroud)
应该:
//subclass should be UITableViewController
@interface TableViewController : UITableViewController <HomeModelProtocol>
@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;
//not needed
//@property (weak, nonatomic) IBOutlet UITableView *listTableView;
@end
Run Code Online (Sandbox Code Playgroud)
在 中-viewDidLoad
,观察:
-(void)viewDidLoad
{
//...
//crashes when adding gesture to a tableView (this is not part of the core problem
//but will be one if not handled) for now... comment it
//[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
//not needed as it's done via IB (but this is not part of the problem)
//self.listTableView.delegate = self;
//self.listTableView.dataSource = self;
//...
}
Run Code Online (Sandbox Code Playgroud)
选择UITableViewController
:
TableViewController
(通过 Identity Inspector)Top Bar
为Translucent Navigation Bar
(通过属性检查器)UINavigationItem
UIBarButtonItem
并将其设置为菜单(就像您在另一个中所做的那样viewControllers
)
IBOutlet
对象连接sidebarButton
到此UIBarButtonItem
在你的-prepareForSegue:sender:
方法中,如果你不传递数据,TableViewController
那么你不需要做任何事情
- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender
{
//...
if ([segue.identifier isEqualToString:@"showList"]) {
//TableViewController *tableController = (TableViewController*)segue.destinationViewController;
//this is definitely not needed whether you pass data or not
//[tableController view];
}
//...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1445 次 |
最近记录: |