我有一个有2个孩子的视图:页面控制和滚动视图,它管理2页动态内容,每页显示一个UITableViewController。用户应该能够水平滑动并查看第二个滚动视图内容。
我已成功将动态数据传递到2个内容表中,但我有3个问题:
1)我无法弄清楚为什么我没有在我为两个内容表配置的原型单元格中看到任何详细的公开图标。
2)在故事板中,我将每个表视图单元格中的出口设置为推送到新视图控制器,但是segue永远不会触发?!怎么可能?
3)我是NSLog(indexPath),即使我点击同一行,它也会输出不同的索引路径? Scroll View上的事件处理和表委托方法-didSelectRowAtIndexPath之间是否存在重叠或某种冲突?
在桌面视图或其他内容中进行选择时,是否需要禁用任何类型的手势?谢谢你的帮助。
更新:使用页面视图控制器而不是滚动视图:结果相同
好的,所以我切换到了一个页面视图控制器实现和相同的确切结果,我看到上面报告的相同的3个问题。我将展示我使用的页面视图控制器方法,因为滚动视图实现太长了。
我有2个类:(1)页面视图控制器和(2)一个内容视图控制器。
我想要的概念是显示一个邮箱类型的场景,我跟踪用户发送的消息和收到的消息(NSArrays)。一个tableview将显示已发送的消息,另一个将显示"已接收"消息。
2个课程
CustomMessagePageViewController:UIPageViewController
CustomMessageContentViewController:UIViewController
CustomMessagePageViewController.m
@implementation CustomMessagePageViewController
{
NSArray *sentMesages;
NSArray *receivedMessages;
}
@synthesize pageTitles=_pageTitles;
- (void)viewDidLoad
{
[super viewDidLoad];
_pageTitles = @[@"Latest Messages", @"Sent Messages"];
// initialize page view controller
self.dataSource = self;
CustomMessageContentViewController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = ((CustomMessageContentViewController *)viewController).pageIndex;
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = ((CustomMessageContentViewController*) viewController).pageIndex;
if (index == NSNotFound) {
return nil;
}
index++;
if (index == [self.pageTitles count]) {
return nil;
}
return [self viewControllerAtIndex:index];
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return [self.pageTitles count];
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}
- (CustomMessageContentViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
return nil;
}
// Create a new view controller and pass suitable data.
CustomMessageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"customMessageContentID"];
pageContentViewController.titleText = self.pageTitles[index];
pageContentViewController.pageIndex = index;
pageContentViewController.messageArray = (index)?sentMesages:receivedMessages;
return pageContentViewController;
}
CustomMessageContentViewController.h
@interface CustomMessageContentViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@property NSUInteger pageIndex;
@property NSString *titleText;
@property NSArray *messageArray;
@property (strong, nonatomic) IBOutlet UITableView *messageListTableView;
@end