Mendeteksi gulir vertikal ke UIScrollView yang bergulir secara horizontal dengan tombol

Saya memiliki UIScrollView yang bergulir secara horizontal. Saya juga menempatkan pengendali saya sendiri untuk melakukan sesuatu yang berbeda pada gulir vertikal. Ini bekerja dengan sangat baik tetapi kemudian saya menambahkan beberapa tombol ke UIScrollView menggunakan kode berikut:

UIButton *catButton = [UIButton buttonWithType:UIButtonTypeCustom];
[catButton addTarget:self action:@selector(clickCatButton:) forControlEvents: UIControlEventTouchUpInside];

tindakan tombol dipanggil ketika diklik:

- (void) clickCatButton:(id) sender 
{
   [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

tetapi masalah saya adalah sejak meletakkan tombol di UIScrollView, tombol tersebut mengambil alih kode yang mengatur gulir vertikal.

Saya agak bingung tentang pendekatan terbaik untuk memperbaikinya.

Terima kasih atas bantuan Anda


person iphaaw    schedule 12.02.2011    source sumber


Jawaban (1)


Jika Anda benar-benar ingin menangani pengguliran vertikal meskipun terjadi tarikan pada tombol, yang mungkin Anda lakukan adalah membuat subkelas UIButton dan meneruskan peristiwa sentuh ke responden berikutnya (yang dalam hal ini adalah tampilan gulir). Di subkelas UIButton Anda, ganti metode penanganan kejadian (touchesBegan... dll.) untuk memanggil implementasi superkelas (UIButton), lalu teruskan kejadian tersebut ke responden berikutnya, misalnya:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}

Namun berhati-hatilah dan pikirkan semua kasus yang dapat terjadi saat penanganan peristiwa tombol dan penanganan Anda untuk pengguliran vertikal berjalan bersamaan. Misalnya, jika menyeret melewati sebuah tombol (walaupun hal itu tidak akan terjadi jika pengguliran vertikal berfungsi dengan baik), maka tombol tersebut menganggap itu adalah 'penekanan' tombol yang valid dan akan memunculkan pesan tindakan.

person MHC    schedule 12.02.2011