我有基于页面的应用。在每个页面上,我在顶部有3个uibutton,右边是uiscrollview(uibuttons可以对数据进行排序)和中心的uitableview。如何显示单元格的详细视图?如果有必要添加uinavigationcontroller我不能这样做。如果我添加它,它会禁用与我的表,按钮和scrollview的交互。 另一个问题是如何在进入下一页时在tableview和scrollview中显示新数据?
我有rootViewController类和DataViewController类。 rootViewController列表:
@interface RootViewController ()
@property (readonly, strong, nonatomic) ModelController *modelController;
@end
@implementation RootViewController
@synthesize pageViewController = _pageViewController;
@synthesize modelController = _modelController;
@synthesize navContr = _navContr;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Configure the page view controller and add it as a child view controller.
//[self presentModalViewController:navContr animated:YES];
self.pageViewController = [[[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil] autorelease];
self.pageViewController.delegate = self;
DataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = [NSArray arrayWithObject:startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
self.pageViewController.dataSource = self.modelController;
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
self.navContr = [[UINavigationController alloc] initWithRootViewController:self.pageViewController];
[self.view addSubview:self.navContr.view];
// Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
CGRect pageViewRect = self.view.bounds;
self.pageViewController.view.frame = pageViewRect;
[self.pageViewController didMoveToParentViewController:self];
// Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
for (UIGestureRecognizer *recognizer in self.pageViewController.gestureRecognizers){
if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]){
[recognizer setEnabled:NO];
}
}
}
经过一些操作后,它可以工作,但我需要帮助才能让它正常工作!
现在它看起来像这样
下一个问题:如何删除顶部的棕色空间???
:: UPDATE ::
问题解决了。只需要将UINavigationController的y轴位置设置为-20;)
答案 0 :(得分:0)
可能还有其他方法,但到目前为止最简单的方法是使用导航控制器。事实上,它的确是为了做到这一点。
如果您不想使用navigationBar,则可以在viewWillAppear函数中隐藏它。
[self.navigationController setNavigationBarHidden:YES animated:YES];
然后,当用户选择一个单元格时,您可以添加另一个UIViewController来推送。
再次阅读你的OP我不知道你是如何添加你的navigationController。
要使用navigationController,您需要创建它并在开始时加载它。然后创建当前的viewController(带按钮和表等的那个......)并将其设置为navigationController的rootViewController。
然后显示navigationController。
您能解释一下如何添加您的navigationController,因为它可能有助于了解出现了什么问题。
由于
:: EDIT ::
好的,我的假设是正确的。
您使用导航控制器的方式并非如此。
好的,所以目前你的AppDelegate文件将有一个方法Application didFinishLaunching ...
它看起来像这样......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[OJFViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
你应该改变它,就好像这样......
首先向appDelegate添加一个属性...
@property (nonatomic, strong) UINavigationController *navigationController;
然后将didFinishLaunchingMethod更改为此...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[OJFViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
这仍然会显示MainViewController但它现在将包含在navigationController中。
接下来在MainViewController函数viewWillAppearAnimated
中添加行...
[self.navigationController setNavigationBarHidden:YES animated:animated];
这将隐藏视图顶部的navigationBar,这样您仍然可以访问按钮。
您需要一个新的ViewController和xib文件(例如DetailViewController)。
当用户选择表格行时,您需要执行类似......
的操作DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
//pass in details of which row was selected.
[self.navigationController pushViewController:detailView animated:YES];
然后会显示您的新视图和新的viewController。您还需要编写一种传递数据的方法(在DetailViewController上设置属性)。
希望这有帮助。
答案 1 :(得分:0)
我不确定这个关于创建基于导航的项目的链接是否可以帮到你..(http://iosmadesimple.blogspot.com/2012/08/navigation-based-project-doing-it.html)< / p>
从该教程中,有一个名为SampleViewController的类,UIViewController的子类。您可能希望在SampleViewController.xib文件中放置一个tableView。然后在SampleViewController.h文件中,添加一个IBOutlet UITableView * yourTable属性并进行合成。将其连接到.xib文件中的tableView。 //或者你可以通过编程方式完成
在你的SampleViewController.h中,让你的界面标题看起来像这样......我想你已经知道了......
@interface SampleViewController:UIViewController&lt; UITableviewDelegate,UITableViewDatasource&gt;
在您的SampleViewcontroller.m中,在viewDidLoad方法下,将表委托和数据源设置为self:
yourTableView.delegate = self;
yourTableView.datasource = self;
之后,你实现了tableView委托和数据源方法...... //你已经知道那些因为你已经能够显示一个tableview;)
其中一种方法是“tableview:didSelectAtIndexpath:” - &gt;这是您单击其中一个单元格时可以放置代码的部分。
假设您有DetailsViewController类,这是您在单击一个单元格后显示的类并显示其详细信息。
DetailsViewController类必须有一个接受您想要显示的数据的变量。比方说,NSString * detailsMessage; //做@property和@synthesize的事情......
让我们回到tableview下的SampleViewController.m文件:didSelectAtIndexpath:方法: 在那个方法里面..把这些代码。
DetailsViewController *detailsVC = [[DetailsViewController alloc] init];
detailsVC.detailsMessage = @"The Data you want to pass.";
[self.navigationController pushViewController:detailsVC animated:YES];
我希望这会有所帮助。 :(