2009-04-30 27 views
9

Tôi tự hỏi liệu có ai đã sử dụng phương thức userInteractionEnabled trên UILabel để cho phép nhãn hoạt động như một nút (hay chỉ để kích hoạt phương thức). Mọi sự trợ giúp sẽ rất được trân trọng. Chúc mừng!Nhãn: Sử dụng phương thức userInteractionEnabled trên nhãn

Cập nhật (4/30/09 @ 1: 07pm) Làm rõ: Tôi có một InfoButton chuẩn và bên cạnh nó tôi muốn đặt nhãn với "cài đặt" văn bản và tôi muốn nhãn hoạt động giống như nút Vì vậy, về cơ bản tôi cần phải gắn các showSettinsView đã được định nghĩa với nhãn "infoLabel", một người dùng nhấp vào infoButton hoặc infoLabel và phương thức này sẽ tắt.

InfoButton đã hoạt động và đang sử dụng IBAction để kích hoạt phương pháp.Tôi muốn biết cách kết nối nhãn để thực hiện cùng một phương pháp.Đó là tất cả, vui lòng!

+0

Bạn sẽ nhận được phản ứng hữu ích hơn nếu bạn làm rõ của bạn câu hỏi: Bạn cần trợ giúp cụ thể là gì? Bạn đã thử cái gì không hiệu quả, và/hoặc chính xác bạn muốn làm gì mà bạn không biết làm thế nào để hoàn thành? – smorgan

+0

@smorgan: Cảm ơn, tôi đã cập nhật câu hỏi. Tôi hy vọng rằng nó sẽ giúp. –

Trả lời

13

userInteractionEnabled không phải là phương pháp mà là tài sản. hink bạn sẽ muốn đặt điều này thành YES để cho phép các sự kiện đi qua màn hình giám sát UIView.

Những gì bạn có thể muốn làm là ghi đè phương pháp touchesBegan:withEvent: của UIView có chứa các phụ đề UIButtonUILabel của bạn.

Trong phương pháp này, hãy kiểm tra xem có bất kỳ chạm nào trong số UITouch nằm trong giới hạn của UILabel hay không.

Tức là, yếu tố CGPoint[touch locationInView] giao nhau với yếu tố CGRect[infoLabel bounds]? Nhìn vào hàm CGRectContainsPoint để chạy thử nghiệm này.

Nếu có, hãy kích hoạt NSNotification gọi cùng một bộ chọn IBAction làm UIButton.

+0

Cảm ơn Alex, tôi sẽ tiếp tục và thử nó và xem những gì tôi có thể làm. Chúc mừng! –

7

Một giải pháp khác có thể là sử dụng UIButton với loại được đặt thành tùy chỉnh, thay vì UILabel. Bằng cách này, nút thứ hai của bạn sẽ trông giống như một số UILabel và bạn có thể định cấu hình nút này để kích hoạt phương thức showSettingsView.

+0

Đó là mẹo thực sự tốt. – fyasar

1

Tôi đồng ý với Alex Apr 30, '09 và đề xuất của tôi chỉ là bổ sung cho nó, nếu bạn không muốn đi với UIButton. Con đường tôi giải quyết nó bằng cách tạo ra một UILabel qua

- (id)initWithFrame:(CGRect)frame 
{ 
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)]; 
    ... 
    [label setUserInteractionEnabled: YES]; 
    [self addSubview: label]; 
} 

sau đó bạn có thể ghi đè lên chạm * phương pháp như touchesBegan, touchesEnded với một cái gì đó giống như

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event { 
     UITouch *touch = [touches anyObject]; 
     if([touch view] == label) { 
      NSLog(@"I've been touched"); 
     } 
    }  
+0

Điều này tốt hơn. – benck

+0

Tôi tự hỏi tại sao tôi có một mã tương tự như bạn, nhưng tôi không phải là bắn touchesBegan –

Các vấn đề liên quan