Ho una vista di scorrimento che usava scorrere quando non aveva pulsanti dappertutto. Ora lo fa, e quando si trascina il mouse (sul simulatore) non succede nulla (penso perché i pulsanti vengono spinti). Come posso fare questo giusto?ScrollView non scorre quando si trascinano i pulsanti
risposta
Questo sta accadendo perché UIButton
subviews del UIScrollView
(presumo che i pulsanti siano aggiunti come sottoview nel tuo caso) stanno tracciando i tocchi e non la vista di scorrimento. UIScrollView
metodo touchesShouldCancelInContentView
è la chiave qui. Secondo la sua descrizione: "Il valore restituito predefinito è SÌ se la vista non è un oggetto UIControl
, altrimenti restituisce NO
.", Ovvero per gli oggetti UIControl
(pulsanti), UIScrollView
non tenta di annullare i tocchi che impediscono lo scorrimento.
Così, per consentire lo scorrimento con tasti:
- Assicurarsi
UIScrollView
proprietàcanCancelContentTouches
è impostato suYES
. - sottoclasse
UIScrollView
e sovrascriveretouchesShouldCancelInContentView
per tornareYES
quando il contenuto oggetto punto di vista è unUIButton
, come questo:
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
if ([view isKindOfClass:[UIButton class]]) {
return YES;
}
return [super touchesShouldCancelInContentView:view];
}
grazie per la risposta. Ho cambiato lo scroll con le immagini per simulare i pulsanti (e tenere traccia di tocchi per sapere quando chiamare un metodo) Proverò comunque la tua soluzione e vedrò come funziona. Grazie! – DanielaM
@DanielaM Se questa meravigliosa risposta ti ha aiutato come sembra, sarebbe bello accettarlo. – iHunter
** bold ** @Roman K - Sei il mio EROE! Ho passato 2 giorni a leggere in molti post \ forum su questo problema sovrapposto ma nessuna modifica o soluzione ha funzionato davvero. La tua soluzione funziona davvero !! Cheers :-) – Shvalb
ho fondato questa domanda cercando la soluzione rapida per questo problema, ho "tradotto" piace questo:
class UIButtonScrollView: UIScrollView {
override func touchesShouldCancelInContentView(view: UIView!) -> Bool {
if (view.isKindOfClass(UIButton)) {
return true
}
return super.touchesShouldCancelInContentView(view)
}
}
speranza che questo potrebbe aiutare
Swift 3 Soluzione
override func touchesShouldCancel(in view: UIView) -> Bool {
if view is UIButton {
return true
}
return super.touchesShouldCancel(in: view)
}
Hai provato su un dispositivo fisico, ci sono molte differenze tra i dispositivi e il simulatore, e il mouse e multi-touch è una delle più grandi! –