2009-02-15 43 views

Trả lời

27

Tôi nghĩ rằng đặt cược tốt nhất của bạn là quên tùy chỉnh chế độ xem UIAlert và tự xây dựng chế độ xem tùy chỉnh.

Đối với một, những gì bạn đang hiển thị thực sự không phải là "cảnh báo" để nó chống lại những gì UIAlertView được thiết kế để làm. Điều này có nghĩa là bạn đang thay đổi mô hình giao diện người dùng trên người dùng mà không bao giờ là ý tưởng hay.

Thứ hai, sẽ dễ dàng hơn để tạo hiệu ứng chế độ xem tùy chỉnh vào vị trí hơn là thử và hack UIAlertView để làm cho nó hoạt động theo ý bạn muốn.

+3

Không chỉ vậy, nhưng cố gắng tùy chỉnh UIAlertView là một trong những điều có thể khiến ứng dụng của bạn từ chối bởi Apple khá nhất quán. –

4

Không có thành phần nào được tích hợp sẵn cho việc này. UIAlertView chỉ nên có văn bản và các nút theo tài liệu HIG.

Bạn sẽ phải tạo chế độ xem của riêng mình và thêm điều khiển vào đó. Ví dụ về HeadsUpUI trong SDK cho thấy cách hiển thị chế độ xem giống như menu tùy chỉnh dưới dạng lớp phủ.

Hy vọng điều đó sẽ hữu ích.

11

Trước tiên, bạn cần phải làm cho hộp cảnh báo lớn hơn để chứa các điều khiển của bạn, nhưng nó phải được đặt ở trung tâm.

Đối với điều này, thay vì đặt kích thước khung hình, văn bản tin nhắn của bạn với "\ n" s là necc. ví dụ:

alert = [[UIAlertView alloc] initWithTitle:@"Rate this picture." 
message:@"Tap a star to rate.\n\n\n\n " /*------ look at here!!----*/ 
delegate:self 
cancelButtonTitle:nil 
otherButtonTitles:nil]; 

Sau đó, sử dụng UIAlertViewDelegate cho cảnh báo.

ghi đè, xemWillAppear: thêm các nút của bạn và đặt khung của chúng theo cách thủ công ở vị trí mong muốn.

OR: tạo ra một toàn bộ quan điểm với một bộ điều khiển xem, và thêm chế độ xem để hộp cảnh báo như:

[myalertview addSubvew:mycomplexalert]; 

Hy vọng điều này sẽ đi vào sự giúp đỡ của bạn :)

Tôi đang sử dụng cảnh báo hộp cho giá đầu vào với hình ảnh ngôi sao, twitter, phản hồi fb, vv

CẬP NHẬT iOS7:

đối với iOS 7, tạo ra cái nhìn của riêng bạn với com ponents và thiết lập nó như xem phụ kiện của alertview:

[alert setValue:imageView forKey:@"accessoryView"]; 

nó thats :-) đơn giản

+1

Tấn công "\ n \ n \ n \ n" dường như không hoạt động với bản phát hành iOS 7 Beta 1 hiện tại! Tôi không chắc liệu điều này có thay đổi trong iOS 7 cuối cùng hay không. – Raphael

+0

Đối với iOS 7, hãy tạo chế độ xem của riêng bạn và đặt chế độ xem đó làm chế độ xem phụ kiện của chế độ xem cảnh báo: [alert setValue: imageView forKey: @ "accessoryView"]; –

+0

Tôi nghĩ rằng có thể có một lý do tại sao "accesoryView" không được truy cập công khai. Vì vậy, điều này có thể phá vỡ trong các phiên bản trong tương lai hoặc có thể bị từ chối bởi Apple. – Raphael

6

This tutorial bao gồm làm thế nào để phân lớp UIAlertView để đạt được một hộp văn bản đầu vào. Nó giải thích cách mở rộng khung nhìn, thêm các bản xem trước (như các hộp văn bản hoặc hình ảnh) và thực hiện một phép chuyển đổi để di chuyển hộp lên cao hơn trên màn hình.

+0

Điều này không thay đổi cách thay đổi kích thước của chế độ xem, nhưng sẽ hữu ích khi hiển thị cách thêm hộp văn bản và sử dụng nội dung đã nhập vào nó. – sasquatch

6

Tôi đã viết một thay thế UIAlertView hoàn hảo gần như pixel, cũng có thể cấu hình đầy đủ.Hãy xem CODialog nếu nó phù hợp với nhu cầu của bạn.

+0

đó là tuyệt vời @Erik Aigner .. tuy nhiên tôi chỉ có một dự án cũ (iOS6) sử dụng thư viện của bạn và chúng tôi cần di chuyển nó sang iOS7 .. thư viện của bạn sử dụng giao diện của iOS6 .. bất kỳ ý tưởng làm thế nào tôi có thể nâng cấp nó để trông/cảm thấy như iOS 7? – abbood

+0

@abbood chỉ ghi đè lên phương thức vẽ –

+0

@ người đàn ông đó là rất nhiều dòng mã .. bạn có biết nếu táo chấp nhận một ứng dụng có thư viện của bạn xem xét rằng họ sẽ chỉ chấp nhận mã được biên dịch chống lại iOS 7? – abbood