2012-02-26 18 views
12

Giả sử tôi có Bảng phân cảnh chứa chế độ xem có chứa nút. Khi người dùng nhấn nút này, một cửa sổ bật lên xuất hiện.Có cách nào để chọn một neo segue theo lập trình không?

Vì vậy, tôi cần đặt một neo bằng cách kéo khoảng cách đến nút bằng cách sử dụng Xcode (và sau đó thực hiện performSegueWithIdentifier:).

Vì vậy, câu hỏi của tôi là: có cách nào để đặt "neo" này theo chương trình không?

Cảm ơn bạn.

Trả lời

14

Trong trường hợp của tôi, tôi đã thêm một số UIBarButtonItem theo chương trình. Vấn đề chỉ sử dụng một cái nhìn vô hình như một archor là, nếu như trong trường hợp của tôi, kích thước của UIBarButtonItem đang thay đổi kích thước của nó, mũi tên của popover không xuất hiện trung tâm, và mặc dù nó hoạt động, trông hơi lạ.

Cách giải quyết.

Tạo một chế độ xem nhỏ trong bảng phân cảnh (kích thước không thực sự quan trọng), biến nó thành ẩn và liên kết nó. Trong trường hợp của tôi, điều này được gọi là invisibleViewAsArchor

Kết nối mục UIBarbutton với hành động sau.

-(IBAction) showMyPopover:(id)sender { 
    if([self.popoverController isPopoverVisible]) 
    {  
     [self.popoverController dismissPopoverAnimated:YES]; 
    }else{ 
     self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x, 
                  [sender view].frame.origin.y-50, 
                  [sender view].frame.size.width, 
                  [sender view].frame.size.height); 

     [self performSegueWithIdentifier:@"segue_to_something" sender:self]; 
    } 
} 

như bạn có thể nhìn thấy trước khi nó cho thấy popover (với performSegueWithIdentifier), tôi đang thay đổi khung của Archor với các giá trị từ nút đó đã bị sa thải sự kiện này.

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

+0

Hi @GUiLTY, vì vậy tôi đang gặp vấn đề tương tự . Đã tự hỏi nếu "invisibleViewAsArchor" một lớp tôi cần phải thực hiện cho rằng xem? – gdubs

+0

Hi @gdubs "invisibleViewAsAnchor" là một chế độ xem chuẩn và bên - (void) {viewDidLoad \t // sau khi mã của bạn ... \t self.invisibleViewAsArchor.hidden = TRUE; } – MiQUEL

+2

Tối ưu hóa nhỏ (nhỏ): bạn không cần "trả lại" trong đó :) – narco

1

Tôi đã gặp vấn đề tương tự khi tôi tạo một BarButtonItem theo lập trình. Bạn cũng có thể có được xung quanh nó bằng cách tạo ra một nút vô hình, vô hiệu hóa mà bạn có thể thiết lập như là neo trong IB.

1

Trong bảng phân cảnh neo cửa sổ bật lên vào một số nút tùy ý. Đừng lo lắng quá nhiều về cái nào vì nó sẽ bị ghi đè trong mã.

Trong phương pháp xem điều khiển prepareForSegue, thêm mã:

let dest = segue.destinationViewController 
dest.popoverPresentationController?.barButtonItem = <your bar button here> 

hoặc nếu bạn muốn để neo để một cái nhìn thay vì

dest.popoverPresentationController?.barButtonItem = nil 
dest.popoverPresentationController?.sourceView = <your view here> 
Các vấn đề liên quan