2013-07-10 9 views
6

Sto provando a creare un controller segmentato molto lungo per consentire agli utenti di scegliere tra molte opzioni. Come posso ottenere all'interno di una vista di scorrimento?Controllo segmentato all'interno della vista di scorrimento

Ho provato a trascinarlo e rilasciarlo ma non mi permette di farlo scorrere.

+1

controlli segmentati non dovrebbe essere così a lungo; Raccomanderei di usare un controllo diverso per quei casi, come un menu pop-over. –

+0

In secondo luogo, @QwertyBob, in particolare con le modifiche dell'interfaccia utente in iOS7, stavo solo testando questo ed è estremamente difficile mettere il dito sul UISegmentedControl giusto per farlo scorrere. –

+0

Davvero? Non scorrerebbe? – centree

risposta

1

È necessario impostare la dimensione del contenuto dello UIScrollView, altrimenti non scorrerà.

myScrollView.contentSize = mySegmentedControl.frame.size; 
0

Si sta utilizzando l'autolayout? In tal caso, sarà necessario impostare la dimensione del contenuto di scrollView all'interno di viewDidLayoutSubviews. Come:

- (void) viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [scrollView setContentSize:[segControl frame].size]; 
} 

Se non si utilizza AutoLayout allora si può solo farlo in -(void)viewDidLoad come:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [scrollView setContentSize:[segControl frame].size]; 
} 

EDIT Si consiglia inoltre di fare lo ScrollView contentSize leggermente più piccolo del tuo segmentato controllo in modo che non ci sia alcun danno nella direzione verticale:

[scrollView setContentSize:CGSizeMake([segControl frame].size.width, [segControl frame].size.height-1)]; 
1

Invece di suggerire come mettere il segmente d controllo in una scrollview (vedi le altre risposte elencate) proporrò un approccio diverso: cambiare l'elemento dell'interfaccia utente.

Se si dispone di un paio (due o tre) opzioni mutuamente esclusive su un'applicazione desktop, è possibile utilizzare i pulsanti di opzione e sarebbe opportuno; ma se avessi dieci e sopra opzioni, lanciare questi pulsanti radio in una scrollview non sarebbe la scelta migliore. Un'interfaccia utente migliore/più pulita utilizzerebbe un menu a discesa.

Questo era per un'applicazione desktop .. ma i principi dell'interfaccia utente per sistemi operativi mobili sono gli stessi. Un controllo di segmento dovrebbe avere poche opzioni (forse cinque parti superiori). Più di questo e dovresti usare un elemento dell'interfaccia utente diverso.

Immaginate se l'iPhone, quando si seleziona una lingua, offrisse ogni lingua in un controllo segmentato. No! Invece, quando scegli una lingua, ti viene mostrata una lista tra cui scegliere.

5

provare ad aggiungere un controllo segmentato in una vista di scorrimento da questo codice:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    journals = [[NSMutableArray alloc]init]; 

    self.tableView.dataSource = self; 
    self.tableView.delegate = self; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 49, 320, 29)]; 
    self.segmentedControl.frame = CGRectMake(0, 0, 640, 29); 

    scrollView.contentSize = CGSizeMake(self.segmentedControl.frame.size.width, self.segmentedControl.frame.size.height -1); 
    scrollView.showsHorizontalScrollIndicator = NO; 

    self.segmentedControl.selectedSegmentIndex = 0; 

    [scrollView addSubview:self.segmentedControl]; 
    [self.view addSubview:scrollView]; 

    [self fillJournals]; 

    // Do any additional setup after loading the view, typically from a nib. 
} 

Ecco un post su come creare un controllo segmentato all'interno di una vista di scorrimento

http://penningthoughtsandmemoirs.com/2013/12/16/sliding-segmented-control/

Scarica la fonte codice da:

https://github.com/sahilriaz1110/SlidingSegmentedControl

+0

Se ritieni che questa risposta sia appropriata, contrassegnala come risposta accettata. – penningthoughts

0

Se UISegmentedControl larghezza è 640, utilizzare:

[yourScrollView setContentSize:CGSizeMake([segControl frame].size.width, 0)]; 

Usando questa linea renderà scorrere orizzontalmente per scegliere più opzione UISegmentedControl.

-1

In UIBuilder è possibile aggiungere ScrollView all'interno del ViewController e riempirlo con il controllo segmentato che è più grande dello schermo.

Segmented Control Storyboard Segmented Control UI Properties

Problemi correlati