2016-02-09 3 views
1

Я использую популярный HMSegmentedControl для представления сегментов в моем проекте. Но теперь я столкнулся с катастрофической проблемой, когда я не могу привязать свои сегменты к просмотру прокрутки. Как пример в объективе C. Сложнее сделать это в Свифте. Код выглядит следующим образом:HMSegmentedControl Закрепление сегментированного элемента управления на свиток в Swift?

self.segmentedControl4 = [[HMSegmentedControl alloc] initWithFrame:CGRectMake(0, 260, viewWidth, 50)]; 
self.segmentedControl4.sectionTitles = @[@"Worldwide", @"Local", @"Headlines"]; 
self.segmentedControl4.selectedSegmentIndex = 1; 
self.segmentedControl4.backgroundColor = [UIColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1]; 
self.segmentedControl4.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]}; 
self.segmentedControl4.selectedTitleTextAttributes = @{NSForegroundColorAttributeName : [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1]}; 
self.segmentedControl4.selectionIndicatorColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:1]; 
self.segmentedControl4.selectionStyle = HMSegmentedControlSelectionStyleBox; 
self.segmentedControl4.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationUp; 
self.segmentedControl4.tag = 3; 

__weak typeof(self) weakSelf = self; 

[self.segmentedControl4 setIndexChangeBlock:^(NSInteger index) 
{ 
    [weakSelf.scrollView scrollRectToVisible:CGRectMake(viewWidth * index, 0, viewWidth, 200) animated:YES]; 
}]; 

[self.view addSubview:self.segmentedControl4]; 

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 310, viewWidth, 210)]; 
self.scrollView.backgroundColor = [UIColor colorWithRed:0.7 green:0.7 blue:0.7 alpha:1]; 
self.scrollView.pagingEnabled = YES; 
self.scrollView.showsHorizontalScrollIndicator = NO; 
self.scrollView.contentSize = CGSizeMake(viewWidth * 3, 200); 
self.scrollView.delegate = self; 
[self.scrollView scrollRectToVisible:CGRectMake(viewWidth, 0, viewWidth, 200) animated:NO]; 
[self.view addSubview:self.scrollView]; 

Может ли кто-нибудь, кто работал над этим третьим лицом, дать мне несколько решений?

ответ

0

Просто установите сегментированный контроль обычно и установите indexChangeBlock прокрутить вид прокрутки:

segmentedControl4.indexChangeBlock = { 
    let frame = CGRectMake(viewWidth * index, 0, viewWidth, 200) 
    scrollView.scrollRectToVisible(frame, animated:true) 
} 

Это будет прокрутить вид Scroll каждый раз, когда изменения индекса сегментированного элемента управления.

+0

Но теперь проблема заключается в том, что размер изображения изменяется в соответствии с ландшафтом, поскольку вид прокрутки принимает свою ширину от self.view.width. это не то же самое в случае с пейзажем ... пожалуйста, предложите что-нибудь. –

+0

Вместо использования 'viewWidth', просто получите текущую ширину прокрутки в любой ориентации. –

+0

У меня есть VC (например, VC1), встроенный в Nav.Controller, представление которого я добавляю в виде прокрутки. Теперь у меня есть кнопка в VC1, которая подключается через segue к VC2. Проблема в том, что, когда я нажимаю на кнопку и перехожу к VC2, панель навигации скрывается в VC2. Как показать nav.bar в VC2? –

1

Вот код прокрутки сегментированного элемента управления. Вы также можете скачать исходный код от here.

import UIKit 
import HSegmentControl 

class ViewController: UIViewController, HSegmentControlDataSource { 

    @IBOutlet weak var segmentControl: HSegmentControl! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 


     segmentControl.dataSource = self 
     segmentControl.numberOfDisplayedSegments = 3 
     segmentControl.segmentIndicatorViewContentMode = UIViewContentMode.bottom 
//  segmentControl.selectedTitleFont = UIFont.boldSystemFont(ofSize: 17) 
     segmentControl.selectedTitleColor = UIColor.white 
//  segmentControl.unselectedTitleFont = UIFont.systemFont(ofSize: 17) 
//  segmentControl.unselectedTitleColor = UIColor.darkGray 
//  segmentControl.segmentIndicatorImage = UIImage(named: "ind_img") 
     segmentControl.segmentIndicatorView.backgroundColor = UIColor(red: 31.0/255.0, green: 48.0/255.0, blue: 93.0/255.0, alpha: 1.0) 

     segmentControl.selectedIndex = 2 
    } 

    // MARK: - HSegmentControlDataSource protocol 
    func numberOfSegments(_ segmentControl: HSegmentControl) -> Int { 
     return 5 
    } 

    func segmentControl(_ segmentControl: HSegmentControl, titleOfIndex index: Int) -> String { 
     return ["Kavin","Sitharth", "Raj", "Selva", "Rajesh"][index] 
    } 

    func segmentControl(_ segmentControl: HSegmentControl, segmentBackgroundViewOfIndex index: Int) -> UIView { 
     let view = UIView() 
//  view.backgroundColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1) 
     return view 
    } 

    @IBAction func valueChanged(_ sender: AnyObject) { 
     print("value did change to \((sender as! HSegmentControl).selectedIndex)") 
    } 
} 
Смежные вопросы