Hazırlamakta olduğum bir haber uygulaması için klasik manşet fotoğrafları bölümünün (yanyana n tane fotoğraf, sağa-sola kaydırılarak geçiş yapılıyor) beni bu kadar uğraştıracağını sanmıyordum. Nitekim bu işlevi elde etmek kısa sürmüştü. Uygulamanın diğer kısımlarından olan haber detay ekranını tamamladığımda manşet fotoğrafına tıklanma işini de kotaracaktım.
Manşet bölümü UIScrollView içerisine yerleşmiş n tane UIImageView’dan oluşuyor. UIScrollView sağa-sola doğru kaydırıldıkça fotoğraflar ekrana geliyor. Bunların üzerine aynı ebatta birer tane görünmeyen UIButton eklediğimde bu sorunu çözeceğimi sanmıştım.
Ne hikmetse eklediğim butonlar (farketmeniz için boylarını kısalttım ve yeşil transparan renk ile kapladım) dokunulduğunda tepki vermiyordu. İçinde bulundukları UIScrollView “bana dokunabilirsin, ama çocuklarıma asla!” diyordu.
Google’ı hallaç pamuğu gibi attım, UIScrollView için Delays Content Touches ve Cancellable Content Touches seçeneklerini iptal etmeyi denedim, UIScrollView’a dokunma olayını yakalayıp UIButton’a iletmeye çalıştım ama nafile..
Çözümü üzerinde çalıştığım uygulamanın eski versiyonunu hazırlayan kişinin kodları arasında buldum.
ScrollView’a UIButton ve UIImageView’ları doğrudan değil bir UIView objesi üzerinden eklemek gerekiyormuş. Bu şekilde sorunsuz çalıştı.. Benim yaklaşık 40 dakikam kayboldu, sizin kaybolmasın inşallah.
int tag=0; for(NSDictionary *item in birDizi) { UIView *view=[[UIView alloc] initWithFrame:CGRectMake(self.frame.size.width*tag, 0, self.frame.size.width, self.frame.size.height)]; UIImageView *img=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; img.tag=tag; img.image=[UIImage imageNamed:@"birImageDosyasi"]; [view addSubview:img]; UIButton *btn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; btn.showsTouchWhenHighlighted = YES; [btn addTarget:self action:@selector(butonTiklandi) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:btn]; [_scrView addSubview:view]; tag++; }