ฉันมี UISearchBar และฉันต้องการแสดง UIViewController อื่นเมื่อฉันคลิกปุ่มค้นหาจาก UISearchBar ฉันใช้วิธีการต่อไปนี้เพื่อสิ่งนั้น:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
UIViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];
[self.navigationController pushViewController:add animated:YES];
}
ปัญหาคือภาพเคลื่อนไหวที่ปรากฏของ UIViewController ถูกเรียกสองครั้ง ฉันเห็นสไลด์ของคอนโทรลเลอร์เก่าสองเท่าจากด้านขวาไปซ้าย
ตอนนี้ ถ้าฉันใช้โค้ดเดียวกันเพื่อแสดงคอนโทรลเลอร์ใหม่เมื่อคลิกที่ UIButton ปกติบางอัน ปัญหาแอนิเมชั่นก็หมดไป ดูเหมือนว่ามันจะเกี่ยวข้องกับ UISearchBar ในทางใดทางหนึ่ง
วิธีการมอบหมายของ searchBarSearchButtonClicked ถูกเรียกเพียงครั้งเดียว
รหัสที่สร้างปัญหานั้นมีน้อยมาก ฉันอาจจะแนบโปรเจ็กต์ตัวอย่างในภายหลัง
แต่ UIVIewCOntroller พร้อมแถบค้นหามีลักษณะดังนี้:
- (void)viewDidLoad {
[super viewDidLoad];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
searchBar.placeholder = NSLocalizedString(@"search a pub or a place", nil);
searchBar.delegate = self;
[self.navigationItem setTitleView:searchBar];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
DLog(@"Filter searchBarSearchButtonClicked");
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
UIViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];
[self.navigationController pushViewController:add animated:YES];
}
ปัญหาเกิดขึ้นทั้งบน iOS 8 และ 9
แก้ไข:
ฉันอัปโหลดโครงการตัวอย่างที่นี่ มันเรียบง่ายมาก
แก้ไข2:
หากฉันนำเสนอคอนโทรลเลอร์ในลักษณะนี้ ไม่ใช่ผ่านตัวควบคุมการนำทาง ภาพเคลื่อนไหวจะแสดงเพียงครั้งเดียว (แต่ก็เป็นแอนิเมชั่นอีกแบบหนึ่ง จากล่างขึ้นบน ก่อนหน้าคือจากขวาไปซ้าย) แต่ฉันต้องทำผ่านตัวควบคุมการนำทาง ดูเหมือนว่าปัญหาจะเกี่ยวข้องกับ UISearchBar Search คลิก + ตัวควบคุมการนำทาง
[self presentViewController:add
animated:YES
completion:nil];
แน่นอนฉันสามารถเรียกมันว่าไม่มีภาพเคลื่อนไหวเช่นนี้:
[self.navigationController pushViewController:add animated:NO];
แต่ถ้าฉันต้องการภาพเคลื่อนไหว
แก้ไข3:
ฉันพยายามแสดงคอนโทรลเลอร์ตัวที่สองผ่านทาง segue แต่ก็ไม่ได้ช่วยอะไร
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[self performSegueWithIdentifier:@"seg1" sender:self];
}
แก้ไข4:
ฉันได้รายงานข้อผิดพลาดนี้ไปยัง Apple แล้วเพราะฉันเดาว่านี่จะต้องเป็นข้อบกพร่องใน UIKit ยังไงก็ตามถ้ามีคนพบวิธีแก้ปัญหาก็คงจะดี
self performSelector
- person danh   schedule 01.07.2016