2012-07-16 15 views
6

Tôi cần chặn giao diện cho đến khi thao tác MBProgressHUD hoàn tất. Tôi đã tham khảo chủ đề này,Giao diện khối MBProgressHUD cho đến khi hoạt động được thực hiện

Block interface until operation is done

Theo đó, chúng ta nên vô hiệu hóa từng hạng mục cá nhân mà không làm việc, đối với tôi. Trường hợp của tôi là tôi cần vô hiệu hóa người dùng bằng cách nhấp vào nút quay lại. Tôi đã thử HUD.userInteractionEnabled = YES để vô hiệu hóa mọi bộ điều khiển ngoại trừ nút quay lại. Có cách nào chặn người dùng thoát khỏi bộ điều khiển đó không?

Kính trọng,
Dilshan

+1

Thêm HUD vào cửa sổ thay vì chế độ xem. – 0x8badf00d

Trả lời

11

nếu bạn không tìm được cách thích hợp để làm điều đó, bạn có thể bỏ qua toàn bộ tương tác của người dùng trước

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

.U có thể ngăn chặn điều này bằng cách

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
+0

Không phải là giải pháp nhàn rỗi nhưng vẫn hoạt động. Cảm ơn bạn. – Dilshan

0

Đây là cách tôi thêm các MBProgressHUD đến quan điểm của tôi và nó ngăn chặn tất cả các đầu vào cho đến khi nó được lấy ra:

MBProgressHUD HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
HUD.opacity = 0.7f; 

[self.view addSubview:HUD]; 

HUD.delegate = self; 
[HUD show:YES]; 

Lưu ý:self là quan điểm điều khiển các HUD đang được thêm vào

+0

Theo cùng một cách. Không làm việc cho việc này. – Dilshan

11

Bạn có thể thêm MBProgressHUD để xem bộ điều khiển chuyển hướng sao cho nó cũng ngăn cản sự tương tác với nút quay lại:

[MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; 
+0

Điều này nghe có vẻ đúng nhưng nó không hiệu quả với tôi. – MattL

4

Nếu bạn muốn có một điều khiển cụ thể để kích hoạt khi HUD hiển thị, bạn chỉ cần thêm dòng [self.view bringSubviewToFront:yourControl]; vào phương thức showHUD của mình là

-(void) showHUD:(UIView *)view 
{ 

    if (self.HUDdisplayed == NO) 
    { 
     self.HUDdisplayed = YES; 
     HUD = [[MBProgressHUD showHUDAddedTo:self.view animated:YES] retain]; 
    } 
// HUD.delegate = self; 
    [self.view bringSubviewToFront:HUD]; 
    [self.view bringSubviewToFront:yourControl]; 

}