2010-05-17 12 views
10

पर वापस बटन जोड़ना मैंने एक UIViewController में एक नेविगेशन बार जोड़ा है। यह केवल एक और UIViewController से प्रदर्शित होता है। मैं एक बाएं साइड बैक बटन रखना चाहता हूं जो कि सामान्य नेविगेशन बार बैक बटन की तरह तीर के समान होता है। ऐसा लगता है कि मैं केवल आईबी के माध्यम से एक बार बटन जोड़ सकता हूं। मुझे लगता है कि बैक बटन को प्रोग्रामेटिक रूप से जोड़ा जाना चाहिए। मुझे यह कैसे करना चाहिए इस पर कोई सुझाव?नेविगेशन बार

वर्तमान में, रूट नियंत्रक में, मैं बस एक addSubView करके एक और UIViewController (viewB) दबाता हूं। दृश्य में, मैं नेविगेशन बार प्रदर्शित करना चाहता हूं। ऐप दृश्य आधारित है, नेविगेशन नियंत्रक आधारित नहीं है।

उत्तर

13

आप एक नेविगेशन नियंत्रक उपयोग कर रहे हैं:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

आप एक नेविगेशन नियंत्रक उपयोग नहीं कर रहे हैं, तो कस्टम बार बटन बनाने के लिए Three20 style घटकों में देखो।

+0

यह कुछ भी नहीं कर रहा है। – 4thSpace

+0

आपको इसे अपने विशेष प्रोजेक्ट के कोड में ट्विक करने की आवश्यकता होगी। आप प्रासंगिक प्रश्न स्निपेट को शामिल करने के लिए अपने प्रश्न को संपादित करना चाह सकते हैं, जहां आप अपने पहले व्यू कंट्रोलर में हैं और अपना दूसरा व्यू कंट्रोलर दबा रहे हैं। –

+0

मैंने प्रश्न अपडेट किया है। धन्यवाद। – 4thSpace

7

मैं इसे नीचे दिए तरीक़े

किया है viewDidLoad विधि में मैं इस कोड है:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

तो शीर्षक में UINavigationBarDelegate प्रोटोकॉल के अनुरूप जोड़ सकते हैं और प्रतिनिधि विधि इस तरह से लागू:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

क्या आपने ऐप्पल को भेजे गए किसी ऐप में इसका इस्तेमाल किया था? यदि हां, तो क्या उन्होंने इसे मंजूरी दे दी? – viplezer

+0

हां, इस दृष्टिकोण में कोई निजी एपीआई नहीं है –

0

इस समस्या को हल करने का एक और तरीका है बार बार आइटम को लगातार नौसेना में धक्का देने के बजाय नेविगेशन बार के लिए आइटम प्रॉपर्टी सेट करना बार स्टैक:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false)