2013-02-08 25 views
6

Tôi có một tình huống mà người dùng sẽ chạm vào UIButton và trong khi họ có thể đã chạm vào nó, tôi cần phải có thể hủy bỏ hoặc làm cho nó thất bại.Hủy liên lạc UIButton trong khi chạm vào nó

Tôi đã cố gắng sử dụng button.enabled và userInteractionEnabled, nhưng cả hai đều không hoạt động khi đang di chuyển. Cả hai phải được thiết lập trước khi chạm bắt đầu.

Tôi có thể khiến nút bị lỗi sau và trong khi nó đang được chạm vào không?

+0

bạn đang cố gắng hủy quá trình nền hoặc ổ cắm trực tiếp được kết nối với nút? – Bartu

Trả lời

0

Chỉ cần có biến BOOL cho biết hành động nút có được phép hay không và kiểm tra xem cần thiết ở đâu. Kích hoạt và userinteractionenabled chỉ là để vô hiệu hóa chạm nói chung

+0

Nhưng làm cách nào tôi có thể hủy các lần chạm sau khi nút đã được đẩy? Với một bool tôi có thể giữ liên lạc từ làm bất cứ điều gì nhưng nó vẫn sẽ cho thấy rằng nó đang được xúc động. – daveMac

0

Không chắc về vấn đề của bạn, nhưng bạn có thể có những hành động differant dựa trên sự kiện kiểm soát như dưới đây

[button addTarget:self 
        action:@selector(onTouchUpInside:) 
      forControlEvents:(UIControlEventTouchUpInside)]; 

[button addTarget:self 
        action:@selector(onTouchDown:) 
      forControlEvents:(UIControlEventTouchDown)]; 

[button addTarget:self 
        action:@selector(onTouchUpOutside:) 
      forControlEvents:(UIControlEventTouchUpOutside)]; 

Xin tha cho tôi nếu nó không phải là hữu ích hay những gì bạn đang tìm kiếm.

+0

Tôi đánh giá cao nỗ lực này, nhưng tôi không chắc đó là những gì tôi đang theo đuổi. – daveMac

2

Một điều bạn có thể làm để giải quyết vấn đề của mình là tùy chỉnh giao diện được nhấn của nút theo nhu cầu của bạn. Sử dụng: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

thiết lập thuộc tính adjustsImageWhenHighlighted để NO và adjustsImageWhenDisabled tài sản để NO

+0

Đây là giải pháp hiện tại của tôi, nhưng có vẻ như tôi có thể hủy liên lạc bằng cách nào đó. – daveMac

+0

bạn có thể hủy liên lạc. Nhưng bạn phải xử lý chúng một cách khác nhau. Bạn phải thực hiện các sự kiện trả lời cảm ứng của 'UIResponder'. Kiểm tra tài liệu Apple http://developer.apple.com/library/ios/#documentation/uikit/reference/UIResponder_Class/Reference/Reference.html và hướng dẫn này http://mobile.tutsplus.com/tutorials/iphone/ios -quick-tip-detect-touches/ – Luke

+0

Chẳng phải cái gì như hitTest đơn giản hơn sao? – daveMac

6

Bạn cần phải đăng ký hai hành động cho nút bấm của bạn, một cho liên lạc xuống và một cho liên lạc lên. Trong liên lạc xuống, bạn có thể quyết định xem bạn có muốn hủy và liên lạc viết logic thực tế để nhấn nút hay không.

[button addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown]; 

- (IBAction)touchDown:(id)sender 
{ 
    UIButton *b = (UIButton*)sender; 

    // Call this if you wish to cancel the event tracking 
    [b cancelTrackingWithEvent:nil]; 
} 
1

Điều này có thể được thực hiện cho bất kỳ UIButton. Nếu bạn muốn hủy nút nhấn tại thời điểm người dùng chạm vào nó, các bước này sẽ hoạt động:

  1. Thiết lập trình xử lý cho các sự kiện cần hủy kiểm tra. Trong trường hợp này, khi nút tắt.

    [yourButton addTarget: self action: @selector (buttonIsDownHandler :) forControlEvents: UIControlEventTouchDown];

  2. Trong xử lý, quyết định có nên hủy bỏ báo chí

    - (IBAction) buttonIsDownHandler: (id) sender { if (needToCancelThisPress) { [yourButton cancelTrackingWithEvent: nil]; } }

  3. Trình xử lý nút cho UIControlEventTouchCancel sẽ được gọi sau khi hủy.

Nút hủy có thể thực hiện bất kỳ lúc nào. Ví dụ: nếu bạn muốn theo dõi thời điểm người dùng nhấn và giữ quá lâu, bạn có thể bắt đầu bộ hẹn giờ trong trình xử lý UIControlEventTouchDown và sau đó hủy liên lạc khi bộ hẹn giờ hết hạn.

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