Fungsi UIButton tidak dipanggil

Hai dan terima kasih sebelumnya atas dukungan Anda :)

Jadi yang saya lakukan adalah: 1. membuat tampilan gulir dan menambahkannya ke tampilan utama 2. lalu ke tampilan gulir tambahkan UIView lain yang ukurannya sama dengan tampilan gulir; 3. dan di UIView tambahkan tombol yang dibuat secara terprogram ke penyihir. Saya juga menambahkan: tag, gambar, ukuran secara terprogram.

Urutan penambahan objek (pengasuhan): UIView->UIScrollView->UIView->UIButton

Dan inilah kode yang saya gunakan:

#import "ViewController.h"

@interface ViewController ()
{
    UIButton *button;
    UIView *buttonHolderView;
}
@end

@implementation ViewController

@synthesize scroll;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //scroll view is added using storyboards
    [scroll setScrollEnabled:YES];
    [scroll setContentSize:CGSizeMake(1840, 1752)];
    scroll.bounces = NO;
    [scroll setBackgroundColor:[UIColor blackColor]];
    //UPDATE 4
    //here changed to integer coordinates and now it works
    buttonHolderView = [[UIView alloc] initWithFrame:CGRectMake( scroll.frame.origin.x, scroll.frame.origin.y, scroll.frame.size.width, scroll.frame.size.height)];
    [buttonHolderView setBackgroundColor:[UIColor blueColor]];
    [scroll addSubview:buttonHolderView];

    NSString *title = @"";
    int tagForTheButton = 0;

    button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.adjustsImageWhenHighlighted = NO;
    button.frame = CGRectMake(xPossition, yPossition, 200, 64);
    button.tag = tagForTheButton;
    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonPressed: ) forControlEvents:UIControlEventTouchUpInside];
    [buttonHolderView addSubview:button];
    [button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"Tile.png"]] forState:UIControlStateNormal];
    //other scroll and pinch gesture adjustments
    //UPDATE WITH CODE FOR PINCH AND SCROLL 


   [scroll setUserInteractionEnabled:YES];
    UIPinchGestureRecognizer *pitchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePitch:)];
    [scroll addGestureRecognizer:pitchGestureRecognizer];

    imageMaxScale = 1.1;
    imageMinScale = 0.2;
    imageCurrentScale = 1.0;



    yMyCharacterFrame = 200;
    xMyCharacterFrame = 200;
    myCharacterFrame = [[UIImageView alloc]init];
    myCharacterFrame.frame = CGRectMake(xMyCharacterFrame, yMyCharacterFrame, 100, 100);
    myCharacterFrame.image = [UIImage imageNamed:@"image0.png"];
    [myCharacterFrame setUserInteractionEnabled:YES];
    [scroll addSubview:myCharacterFrame];
}

-(void)handlePitch:(UIPinchGestureRecognizer *) pinchGesture{

    if (imageCurrentScale * [pinchGesture scale] > imageMinScale && imageCurrentScale * [pinchGesture scale] <imageMaxScale) {
        imageCurrentScale = imageCurrentScale * [pinchGesture scale];
        CGAffineTransform zoomTransform = CGAffineTransformMakeScale(imageCurrentScale, imageCurrentScale);
        [[pinchGesture view] setTransform:zoomTransform];
    }


    [pinchGesture setScale:1.0];
    CGRect scrollFrame;
    scrollFrame.origin = _mainViewHolder.frame.origin;
    scrollFrame.size = CGSizeMake(568, 320);
    scroll.frame = scrollFrame;

}

-(void)buttonPressed:(UIButton *)sender{
    NSLog(@"button pressed");   
}

Tombolnya digambar di layar tetapi ketika saya mencoba mengetuknya, tombol itu tidak masuk ke fungsi yang ditekan (bukan NSLog).

Ada saran? Saya juga tidak mengerti apa yang dimaksud dengan addTarget (Saya telah membaca dokumentasi Apple).

PEMBARUAN 2: Jika saya menambahkan tombol ke tampilan gulir, tombol itu tidak hanya ditampilkan tetapi saya juga dapat mengetuknya.

PEMBARUAN 3: SAYA TELAH MENJALANKAN: po [scroll recursiveDescription]. Itu kembali:

UIScrollView: 0x7f95c9c7adf0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f95c9c7f5f0>; layer = <CALayer: 0x7f95c9c79820>; contentOffset: {0, 0}; contentSize: {1840, 1752}>
   | <UIImageView: 0x7f95c9c7ed40; frame = (317.5 561; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9c7ec20>>
   | <UIImageView: 0x7f95c9c7d2f0; frame = (313 565.5; 7 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9c7dda0>>
   | <UIButton: 0x7f95c9d9f9c0; frame = (0 0; 320 568); opaque = NO; layer = <CALayer: 0x7f95c9d9e750>>
   |    | <UIButton: 0x7f95c9d9fea0; frame = (0 0; 200 64); opaque = NO; layer = <CALayer: 0x7f95c9d96540>>
|    |    | <UIImageView: 0x7f95c9cc4590; frame = (0 0; 200 64); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9cc4690>>

DAN:

(lldb) po [button recursiveDescription]
<UIButton: 0x7f95cd24e1f0; frame = (0 0; 200 64); opaque = NO; tag = 0; layer = <CALayer: 0x7f95cd24e100>>
   | <UIImageView: 0x7f95cd251b70; frame = (0 0; 200 64); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7f95cd251c70>>

PEMBARUAN 4: Kode tampaknya berfungsi dengan baik setelah diubah menjadi integer: buttonHolderView = [[UIView alloc] initWithFrame:CGRectMake( scroll.frame.origin.x, scroll.frame.origin.y, scroll.frame.size.width, gulir.bingkai.ukuran.tinggi)];

Terima kasih atas semua bantuan Anda terutama kepada DoertyDoerk yang menunjukkan sesuatu yang benar-benar baru bagi saya.


person Bianca Ioana    schedule 11.01.2015    source sumber
comment
Opsi user Interaction Enabled tidak aktif untuk gulir? Saya mencoba kode Anda dan berhasil.   -  person gabbler    schedule 11.01.2015
comment
Saran 1: cari superview tombol mana pun dengan userInteractionEnabled disetel ke NO.   -  person Jeffery Thomas    schedule 11.01.2015
comment
Saran 2: sebagai ujian, hapus semua pengenal isyarat. Mereka dapat mengganggu aktivitas sentuhan.   -  person Jeffery Thomas    schedule 11.01.2015
comment
setel buttonHolderView.userInteractionEnabled = benar;   -  person Muhammad Adnan    schedule 11.01.2015
comment
Ya, dalam kode saya diaktifkan: [scroll setUserInteractionEnabled:YES]; dan tidak berfungsi..   -  person Bianca Ioana    schedule 11.01.2015
comment
tapi apakah sasarannya tepat?   -  person Bianca Ioana    schedule 11.01.2015
comment
saya juga telah mengaktifkan interaksi untuk buttonHolderView dan masih belum ada apa-apa   -  person Bianca Ioana    schedule 11.01.2015


Jawaban (2)


Kode Anda untuk tombol itu sendiri terlihat baik-baik saja. Kecuali untuk xPossition, yPossition mengkompilasinya dengan baik dan buttonPressed: dipanggil. Saya menduga ada masalah dengan hierarki tampilan Anda seperti yang telah disarankan di komentar sebelumnya. Saya akan menetapkan breakpoint di akhir metode `viewDidLoad: Anda. Kemudian saat istirahat di konsol ketik perintah berikut dan periksa apakah tombol Anda terlapisi.

po [[UIWindow keyWindow] recursiveDescription]

Anda mungkin ingin menyalin & menempelkan hasilnya ke editor teks Anda agar lebih mudah dibaca.

Semoga itu bisa membantu! masukkan deskripsi gambar di sini

person DoertyDoerk    schedule 11.01.2015
comment
Saya telah menambahkan tangkapan layar ke jawaban saya sebelumnya. Ketika aplikasi mencapai breakpoint, cukup salin & lewati perintah yang saya tunjukkan kepada Anda ke jendela konsol di kanan bawah layar Xcode seperti yang ditunjukkan di atas dan tekan kembali. Anda juga mungkin ingin mencoba memecahkannya di akhir -viewDidAppear jika hasilnya tidak meyakinkan. - person DoertyDoerk; 12.01.2015
comment
ketika saya menulis perintah, ia mengembalikan nihil pada baris berikutnya, apa yang harus dilakukannya? - person Bianca Ioana; 12.01.2015
comment
Saya baru saja mencarinya di Google dan sepertinya ini merupakan alternatif dari Debug View Hierarchy, saya akan mencoba keduanya, saya menabur sesuatu tentang ini beberapa bulan yang lalu tetapi saya tidak tahu apa itu dan bagaimana menggunakannya, terima kasih untuk titik awalnya - person Bianca Ioana; 12.01.2015
comment
Saya telah menjalankan: (lldb) po [scroll recursiveDescription] - person Bianca Ioana; 12.01.2015
comment
Periksa jejak kedua Anda, baris 2 yang memberikan detail tentang gambar latar belakang. Di sini tertulis userInteractionEnabled = TIDAK. Saya akan menyetelnya ke YA di -viewDidLoadatau membuangnya sama sekali setidaknya untuk pengujian. - person DoertyDoerk; 12.01.2015
comment
menghapus gambar latar belakang tombol tetapi masih tidak dapat disadap - person Bianca Ioana; 12.01.2015
comment
Apakah Anda juga menyetel button.userInteractionEnabled = YES; ? - person DoertyDoerk; 12.01.2015
comment
Mari kita melanjutkan diskusi ini di chat. - person DoertyDoerk; 12.01.2015

Mungkin coba ini:

[buttonHolderView bringSubviewToFront:button];
person weso    schedule 11.01.2015
comment
Sepertinya Anda bisa melihat saya, tapi Anda tidak bisa menyentuh saya. Tombolnya terlihat, tapi mungkin dalam bingkai yang lebih kecil. Contoh: bingkai dengan tinggi 100 dan tombol dengan posisi 120 y Anda dapat melihatnya tetapi tidak dapat mengetuknya. - person weso; 12.01.2015