Video: Cách vừa chat Messenger, vừa lướt web trên iPhone 2025
Một điều thú vị về lượt xem trong ứng dụng iOS của bạn (hoặc có thể) tải nội dung web thực sự vào ứng dụng của bạn thay vì sử dụng trình duyệt - rằng các liên kết này đang hoạt động và người dùng có thể theo các liên kết từ khung nhìn nếu bạn cho phép.
Sau khi người dùng ở trang web thời tiết, người dùng có thể muốn xem liên kết NWS New York, NY ở góc trên bên trái. Nếu người dùng theo dõi liên kết đó, anh ta sẽ không có cách nào để trở lại trang gốc.
Hmm.
Để có thể điều hướng trở lại chế độ xem có nguồn gốc, bạn cần phải tạo một nút khác và gắn nó vào Back to Weather (hoặc bất kỳ bộ điều khiển trước đó) để người dùng biết rằng cô ấy có thể sử dụng nó để trở lại trang trước lượt xem. Tạo nút này là khá dễ dàng để làm.
Có lẽ, bạn không muốn có nút đó bật lên khi người dùng ở trang web có nguồn gốc, vì lúc đó, sẽ không có trở lại. Vì vậy, làm thế nào để bạn theo dõi những người ở đâu trong cấu trúc liên kết dẫn đường? Ở đây, bạn được hỗ trợ bởi hai phương pháp ủy nhiệm xem web, webView: shouldStartLoadWithRequest: navigationType: và webViewDidFinishLoad:.
webView: shouldStartLoadWithRequest: navigationType: là một phương pháp ủy thác UIWebView. Nó được gọi trước khi một khung nhìn web bắt đầu tải nội dung để xem liệu người dùng có muốn tải tiếp không.
Trước tiên, áp dụng giao thức UIWebView bằng cách thêm mã đậm vào WeatherController. h.
#import "DetailViewController. H" @interface WeatherController: DetailViewController @ tài sản (yếu, nonatomic) IBOutlet UIWebView * weatherView; -d
Hãy nhớ rằng khi bạn áp dụng một giao thức ủy nhiệm, trình biên dịch sẽ kiểm tra để đảm bảo rằng tất cả các phương pháp yêu cầu là trong thực tế ở đó và rằng tất cả các loại là chính xác - do đó, làm điều đó!
Tiếp theo, thêm mã này vào WeatherController. m.
- (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) yêu cầu chuyển hướngType: (UIWebViewNavigationType) navigationType {if (navigationType == UIWebViewNavigationTypeLinkClicked) {if ([[UIDevice currentDevice] userInterfaceIdiom == UIUserInterfaceIdiomPad) { nếu (! [self. toolbar. items containsObject: self. backButton]) (NSMutableArray * itemsArray = [tự. thanh công cụ. các mục có thể thay đổiCopy]; [itemsArray addObject: tự. nút quay lại]; [tự. toolbar setItems: itemsArray hoạt hình: KHÔNG];} khác {tự. navigationItem. rightBarButtonItem = tự. return}; return YES;}
Ngay từ đầu, bạn kiểm tra xem liệu người dùng đã chạm vào một liên kết được nhúng hay không. (Bạn phải xem liệu một liên kết được nhấp vào bởi vì thông điệp này được gửi đến các đại biểu trong một số hoàn cảnh khác nhau.)
if (navigationType == UIwebViewNavigationTypeLinkClicked) (
Sau đó, bạn kiểm tra để xem bạn đang sử dụng iPad hay không. Nếu bạn đang sử dụng iPad, bạn sẽ sử dụng thanh công cụ, nhưng trên iPhone, bạn sẽ sử dụng thanh điều hướng.
if ([[UIDevice currentDevice] userInterfaceIdiom == UIUserInterfaceIdiomPad) (
Nếu bạn đang sử dụng iPad và người dùng đã nhấp vào một liên kết, bạn muốn có nút Quay lại để người dùng có thể quay lại. Nếu có ở đó, bạn không muốn thêm giây nữa. Vì vậy, bạn nhìn vào các mảng mục trong thanh công cụ để xem nếu tự. backButton đã có ở đó.
Nếu không có nút Back ở đó, thêm nó với mã chuẩn để làm điều này: bạn sao chép mảng itms của thanh công cụ vào một thanh công cụ mảng có thể thay đổi được gọi là itemsArray. Sau đó, bạn thêm nút Quay lại vào nó và thay thế mảng của thanh công cụ bằng mảng mục có thể thay đổi.
{NSMutableArray * itemsArray = [tự. thanh công cụ. các mục có thể thay đổiCopy];
[itemsArray addObject: tự. nút quay lại];[tự. toolbar setItems: itemsArray animated: NO];}
Tiếp theo, thêm phương thức goBack: vào tệp tin WeatherController. m. Đây là thông báo được gửi khi nút Quay lại
Bất kỳ được nhấn. - (void) goBack: (id) sender {[tự. weatherView goBack];}
Cuối cùng, bạn muốn thoát khỏi nút Quay lại
Dù khi bạn đang hiển thị trang gốc. Đây là mã để làm điều đó. - (void) webViewDidFinishLoad: (UIWebView *) webView {if ([self. WeatherView canGoBack] == KHÔNG) {NSUInteger backButtonIndex = [tự. thanh công cụ. mục indexOfObject: tự. nút quay lại]; if (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) && (backButtonIndex! = NSNotFound) {NSMutableArray * itemsArray = [tự thanh công cụ các mục mutableCopy]; [itemsArray removeObject: tự backButton]; [tự setItems thanh công cụ: itemArray animated: NO];} else {selfIt navigationItem rightBarButtonItem = nil;}}}
Các delegate được gửi webViewDidFinishLoad: message sau khi view đã được tải. Tại thời điểm này, bạn kiểm tra để xem liệu có điều gì để đi trở lại (xem web theo dõi những thứ đó) Nếu không, gỡ bỏ nút từ thanh công cụ hoặc Thanh điều hướng
