iOS:我可以在iPhone横向模式下让UITableView水平滚动吗?

iOS:我可以在iPhone横向模式下让UITableView水平滚动吗?,iphone,ios,Iphone,Ios,可能重复: 我可以在iPhone横向模式下使用水平滚动的UITableView吗 现在的情况是这样的: 应该是这样的: 我想知道是否应该在横向模式中使用UIScrollView,从而根据设备的方向在UITableView和UIScrollView之间切换 谢谢我会将UITableView放在UIScrollView中。这将提供水平滚动 但是我有点困惑:第二个屏幕截图显示了一个UINavigationController?你可以试试这个 您需要的是带分页的UIScrollView。它的工作原理与

可能重复:

我可以在iPhone横向模式下使用水平滚动的UITableView吗

现在的情况是这样的:

应该是这样的:

我想知道是否应该在横向模式中使用UIScrollView,从而根据设备的方向在UITableView和UIScrollView之间切换


谢谢

我会将UITableView放在UIScrollView中。这将提供水平滚动

但是我有点困惑:第二个屏幕截图显示了一个UINavigationController?

你可以试试这个


您需要的是带分页的UIScrollView。它的工作原理与标准UITable基本相同。当你从左向右滚动时,你只需在堆栈上按下新的“单元格”并显示它们

下面是一个示例代码:

// .h File

@interface PagingViewController : UIViewController  <UIScrollViewDelegate>{

    NSMutableArray *cells;

}
@property(nonatomic,retain)NSMutableArray *cells;

-(id)initWithCells:(NSMutableArray*)tableCells;
-(void)loadPage:(int)page;

@end



// .m File

@interface PagingViewController ()

@property(nonatomic,retain)NSMutableArray *viewControllers;
@property(nonatomic,retain)UIView *contentView;
@property(nonatomic,readwrite)NSUInteger numberOfPages;

@end

@implementation PagingViewController

@synthesize viewControllers;
@synthesize contentView;
@synthesize cells;
@synthesize numberOfPages;


-(id)initWithCells:(NSMutableArray*)tableCells{

        self = [super init];

    if(self) {

        self.cells = tableCells;
        numberOfPages = [cells count];

        NSMutableArray *controllers = [[NSMutableArray alloc] init];
        for (unsigned i = 0; i < numberOfPages; i++)
        {
            [controllers addObject:[NSNull null]];
        }
        self.viewControllers = controllers;
        [controllers release];

        contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

        self.view = contentView;

        [self loadPage:0];

    }
    return self;
}

- (void)loadPage:(int)page{

    if (page < 0)
        return;
    if (page >= kNumberOfPages)
        return;
    else if(page > 0){       
        CustomCellVC *cell = [viewControllers objectAtIndex:page];

        if ((NSNull *)cell == [NSNull null]){
            cell = (CustomCellVC*)[cells objectAtIndex:page];
            [viewControllers replaceObjectAtIndex:page withObject:cell;
            [cell release];
        }

        if (cell.view.superview == nil)
        {
            [contentView addSubview:cell.view];
        }
    }
}
/.h文件
@界面分页ViewController:UIViewController{
NSMutableArray*单元;
}
@属性(非原子,保留)NSMutableArray*单元格;
-(id)initWithCells:(NSMutableArray*)表单元格;
-(无效)加载页:(内部)页;
@结束
//.m文件
@界面分页视图控制器()
@属性(非原子,保留)NSMUTABLEARRY*viewControllers;
@属性(非原子,保留)UIView*contentView;
@属性(非原子,读写)为整数页数;
@结束
@PagingViewController的实现
@综合视图控制器;
@综合内容视图;
@合成细胞;
@综合页数;
-(id)initWithCells:(NSMutableArray*)表单元格{
self=[super init];
如果(自我){
self.cells=tableCells;
numberOfPages=[单元格计数];
NSMutableArray*控制器=[[NSMutableArray alloc]init];
for(无符号i=0;i=kNumberOfPages)
返回;
如果(页面>0){
CustomCellVC*单元格=[viewControllers objectAtIndex:page];
if((NSNull*)单元格==[NSNull]){
单元格=(CustomCellVC*)[单元格对象索引:第页];
[viewControllers replaceObjectAtIndex:page with Object:cell;
[细胞释放];
}
if(cell.view.superview==nil)
{
[contentView addSubview:cell.view];
}
}
}
//别忘了解除锁定


我是从内存中写的,所以可能会有一些小错误。

要实现水平滚动,你应该使用UIScrollView并手动管理它的子视图。这并不像听起来那么难。WWDC有几段视频介绍了可以使用滚动视图的技术。它们值得一看

高级ScrollView技术 在以下位置设计具有滚动视图的应用程序:

非常简单的示例,当用户将设备旋转到横向时如何显示scrollView:

//header
// tableView and scrollView has the same superview
// scrollView is placed above tableView
@property(nonatomic, retain) IBOutlet UITableView *tableView;
@property(nonatomic, retain) IBOutlet UIScrollView *scrollView;


//implementation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [UIView animateWithDuration:duration 
                     animations:^(void) {
                         if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
                             self.scrollView.alpha = 1.0f;
                         } else {
                             self.scrollView.alpha = 0.0f;
                         }
                     }];
}

我一直在想这个问题——好问题Evernote的iPhone应用程序在横向模式下的水平滚动方面也做了类似的事情,但我不确定它们是如何实现的。第二个屏幕截图显示了表格中的一个单元格应该如何在横向模式下显示。如果你横向滑动,则会显示下一个单元格。我可能会选择f或者一个带有页面分割的UIScrollView…但是,我不明白你写了什么。UITableView已经是一个UIScrollView…我只需要使用其中的一个,对吗?如果我在旋转设备时在它们之间切换是有效的还是太贵了?你不应该在UIScrollView中嵌入UITableView查看第一个灰色框。@Abizert汉克斯。忘了UITableView已经是UIScrollView了……谢谢,但是如果我能在没有第三方的情况下解决这个问题,那就更好了。那么,我应该在UITableView和UIScrollView之间切换,还是也应该在肖像模式下使用UIScrollView?我说的是效率方面。@Patrick,是的,你需要在它们之间切换n用户旋转设备。这样做可以在纵向和横向模式下以不同的方式显示信息,我认为这很好,因为横向模式下的UITableView看起来不太好。好的。那么我应该如何具体实现这一点?我应该创建UIScrollView并从DidRotateFrominerFaceOrientation将其视图设置为当前视图吗n?换句话说,UIScrollView是否应该在我的UITableView中声明,然后在设备旋转时最终分配当前视图?使用UIView作为主视图,并在其中放置表格视图和滚动视图。因此,您建议在纵向模式中也使用UIScrollView?换句话说,根本不使用UITableView?不,我不会ld将UITableView用于纵向,然后将其分页用于横向。我给出了一个示例,说明如何通过传递单元格数组将常规UITableView转换为分页。好的,那么我应该使用didRotate方法从UITableView处理设备的旋转?我检查设备是否旋转,如果不旋转,则初始化UIScrollView是否已初始化并在两个视图之间切换?