Domanda

Una rapida domanda sulla classe UISegmentedControl su iPhone.

Eventualmente, alcuni potrebbero aver notato come nel suo stato predefinito con 2 segmenti, il controllo segmentato continuerà a essere attivato anche se l'utente tocca un segmento attualmente selezionato.

Ho visto UISegmentedControls nelle app che negano quel comportamento e non si attivano quando l'utente preme un segmento selezionato. Vale a dire, l'app iTune Store di Apple.

Esiste un modo semplice per impedire questo comportamento che sto trascurando o devo scrivere un po 'di logica in valueChanged?

Ho provato a disabilitare i segmenti attualmente selezionati e abilitare quelli non selezionati, ma questo sembra cambiare l'aspetto del controllo quando non lo voglio fare.

Qualche idea?

È stato utile?

Soluzione

Cerca nel file di intestazione UISegmentedControl.h (un modo semplice è fare doppio clic su " UISegmentedControl " in XCode con Comando premuto).

Lì vedrai un numero di elementi in una struttura _segmentedControlFlags . Se crei una categoria su UISegmentedControl, puoi manipolare uno di quegli elementi, tra cui dontAlwaysToggleForTwoSegments che come potresti immaginare con il nome è quello che stai cercando.

Dato che questo è documentato nell'intestazione dell'API (sebbene non nella documentazione effettiva), dovrebbe essere abbastanza sicuro da usare.

Altri suggerimenti

Questo comportamento predefinito è stato modificato nell'API 3.0.

In 3.0, " _segmentedControlFlags " è stato modificato in " momentaneo " proprietà, che può ancora essere trovata nel file di intestazione UISegmentedControl.h .

L'accesso a _segmentedControlFlags tramite una categoria è considerato come l'uso di un'API privata e quindi una violazione del Contratto di licenza di Apple, come ho dovuto imparare oggi. Fino ad ora, ho pensato, le categorie sono una funzione linguistica per correggere qualcuno che ha un orribile design di classe ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top