UISegmentedControl 设置 UITableView、页面控制、scrollview、图像视图

Posted

技术标签:

【中文标题】UISegmentedControl 设置 UITableView、页面控制、scrollview、图像视图【英文标题】:UISegmentedControl setting UITableView, page control, scrollview, image view 【发布时间】:2011-10-05 13:31:51 【问题描述】:

我有一个 4 段的分段控件

segment 1 - 我需要一个页面控件来浏览照片 左右滑动。最多 1-4 张照片

Segment 2 & 3 - 我需要一个表格视图

第 4 段 - 我需要它才能播放视频

我正在这样做

- (IBAction)infoAction:(id)sender 

NSString * selectedTitle = [info titleForSegmentAtIndex:[info selectedSegmentIndex]];


NSLog(@"Selected Title = %@",selectedTitle);//test


switch ([info selectedSegmentIndex])

   case 0:
    
        test.text = [frogInfo.imageFiles objectAtIndex:0];
        test.textColor = [UIColor whiteColor];
        [tempImageView setImage:[UIImage imageNamed:@"Detail1Temp.png"]];
        break;

    


    case 1:

        

        test.text = frogInfo.description;
                    test.textColor = [UIColor whiteColor];
        [tempImageView setImage:[UIImage imageNamed:@"Detail2Temp.png"]];
        break;

    

    case 2:

    
        test.text = frogInfo.distribution;
        test.textColor = [UIColor whiteColor];
        [tempImageView setImage:[UIImage imageNamed:@"Detail3Temp.png"]];
        break;

    

    case 3:

    

        test.text = [frogInfo.videoFiles objectAtIndex:0];
        test.textColor = [UIColor whiteColor];
        [tempImageView setImage:[UIImage imageNamed:@"Detail4Temp.png"]];
        break;

    




带有页面控件的图片

部分表格视图

根据我想做的事情,有可能吗?在这个 switch case 函数中?

任何人都可以展示或提供有关如何解决页面控件滑动的教程的链接吗?

感谢阅读

【问题讨论】:

您是否考虑过使用 UITabBar 代替分段控件?如果不接受使用标签栏,您将不得不手动切换基于选定段的视图,UISegmentedControl 不提供任何类型的视图供您放置控件。 这是视图之一,我有其他视图的标签栏,基本上大部分段都是表格视图,除了段 1 是图片 那么您可能必须隐藏和取消隐藏第一个片段的滚动视图、连接到其中一个数据源(每个片段一个)的表格视图和最后一个片段的 MPMoviePlayer。 你能给我看一个关于如何做滚动视图图像的教程吗? 参考这篇文章:***.com/questions/1595389/… 【参考方案1】:

尽管我使用 UISlider 而不是分段控件,但我已经做了非常相似的事情 - 你需要的是一个可分页的 UISCrollview,如果每个页面占据 iPhone 的整个宽度,则有 4 个大小相等的页面 (UIViews) 一个接一个地水平加载页面为 320 宽,滚动视图的内容大小宽度为 1280。绑定 UIsegmented 控件以编程方式滚动页面:

假设页面宽度为 320:

     -(IBAction)movepage:(id)sender 
      int xloc = (segmentedController.selectedSegmentIndex * 320);
      CGRect fieldrect = CGRectMake(xloc,0,320, pagesize.height);

    [scrollView scrollRectToVisible:fieldrect animated:YES];


加载滚动视图和管理页面控制器:

pagectrl.numberOfPages = 4;
pagectrl.currentPage = 0;

scrollView.pagingEnabled = YES;
scrollView.contentSize=CGSizeMake(320* pagectrl.numberOfPages, 500);
scrollView.showsVerticalScrollIndicator = NO;
scrollView.showsHorizontalScrollIndicator = YES;
scrollView.bouncesZoom = NO;
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
scrollView.scrollsToTop = NO;


scrollView.delegate = self;
search_url.delegate = self;
user.delegate = self;
password.delegate = self;
rpc_code.delegate = self;


// add pages

int page = 0;

CGRect frame = scrollView.frame;
pagesize = frame.size.width;
frame.origin.y = 0;
frame.origin.x = frame.size.width * page;
firstView.frame = frame;
[scrollView addSubview:firstView];

page ++;
frame.origin.x = frame.size.width * page;
locsubView.frame = frame;
[scrollView addSubview:locsubView];

page ++;
frame.origin.x = frame.size.width * page;
QRgensubView.frame = frame;
[scrollView addSubview:QRgensubView];

page ++;
frame.origin.x = frame.size.width * page;
scansubView.frame = frame;
[scrollView addSubview:scansubView];

page ++;
frame.origin.x = frame.size.width * page;
symbologysubView.frame = frame;
[scrollView addSubview:symbologysubView];


[self registerForKeyboardNotifications];

 CGRect fieldrect = CGRectMake(0,0,320, pagesize);

 [scrollView scrollRectToVisible:fieldrect animated:YES];  //goto 1st page


请注意,您可能需要控制或管理用户滚动滚动视图的能力 - 您可以通过设置滚动视图委托来实现 - 下面的代码不符合您的确切要求,但我相信您可以弄清楚休息!

 - (void)scrollViewDidScroll:(UIScrollView *)sender
   
   // We don't want a "feedback loop" between the UIPageControl and the scroll delegate  in

  // which a scroll event generated from the user hitting the page control triggers updates from

   // the delegate method. We use a boolean to disable the delegate logic when the page control is used.

   //  if (pageControlUsed)
   //  
  // do nothing - the scroll was initiated from the page control, not the user dragging
  //       return;
  //   

  // Switch the indicator when more than 50% of the previous/next page is visible

  int page = floor((scrollView.contentOffset.x - pagesize / 2) / pagesize) + 1;
  pagectrl.currentPage = page;



  // A possible optimization would be to unload the views+controllers which are no longer visible
 

【讨论】:

以上是关于UISegmentedControl 设置 UITableView、页面控制、scrollview、图像视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在iPhone中将图像设置为UISegmentedControl?

如何在不使用自动布局的情况下设置 UISegmentedControl 子类的高度?

UISegmentedControl选择状态图标图像

UISegmentedControl 设置 UITableView、页面控制、scrollview、图像视图

UISegmentedControl 错误的dividerImage

如何使单个 UISegmentedControl 部分检测多个触摸