2016-03-27 15 views
8

में UISplitViewController का उपयोग कैसे करें, इसलिए मैं के साथ एम्बेडेड एक प्रोजेक्ट में UISplitViewController जोड़ता हूं।स्विफ्ट

UISplitViewController में UINavigationController एक मास्टर & अपने स्वयं के रूट नियंत्रक के साथ विस्तृत संबंध है।

मास्टर UINavigationControllerrootController विवरण UINavigationController पर विस्तार से सीगू है।

यहाँ देखें:

enter image description here

सभी बहुत सरल है ना? अब TableViewController में मैं निम्नलिखित करता हूं;

class TableViewController: TableViewController, UISplitViewControllerDelegate { 

var collapseDetailViewController: Bool = false 

override func viewDidLoad() { 
    super.viewDidLoad() 

    splitViewController?.delegate = self 
} 


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    collapseDetailViewController = false 
} 

// MARK: - UISplitViewControllerDelegate 

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
    return false 
} 

मेरे पास एक UISplitViewController एक्सटेंशन है और निम्न कार्य करें;

extension UISplitViewController: UISplitViewControllerDelegate { 

public override func viewDidLoad() { 
    self.extendedLayoutIncludesOpaqueBars = true 
} 

} 

इस सब के साथ मुझे निम्नलिखित समस्याएं मिलती हैं;

  • tableviewcell जब पर दोहन विवरण दृश्य देखने विस्तार करने के segue के लिए मास्टर छोड़ दिया फलक जब iPad पर सही के बजाय परिदृश्य में भीतर खुल जाता है। मैं यह भी नहीं समझ सकता कि मास्टर व्यू को आईपैड पर या आईफोन पर पहली बार के रूप में कैसे दिखाना है। इन दो समस्याओं से संबंधित हो सकता है या नहीं भी मुझे यकीन नहीं है।

    enter image description here

  • मोबाइल पर टैब बार है कि मैं समझ नहीं निकालने का तरीका ऊपर एक नीचे बार है। जब तक मैंने UISplitViewController एक्सटेंशन viewDidLoad में कोड जोड़ा, तब तक मुझे आईपैड पर एक ही समस्या थी, हालांकि मोबाइल पर इसका असर नहीं पड़ा। यहाँ देखें,

enter image description here

पुनश्च: यदि प्रश्न बहुत लंबा है मुझे यकीन है कि नहीं कर रहा हूँ, मुझे लगा यह संदर्भ में सब कुछ डाल करने के लिए सबसे अच्छा है। इसके अलावा मैं बहुत सारे शोध कर रहा हूं लेकिन मुझे स्विफ्ट में कोई भी संसाधन नहीं मिल रहा है जो यूआईटीएबीबार नियंत्रक का उपयोग करता है।

मैं निम्नलिखित ट्यूटोरियल http://nshipster.com/uisplitviewcontroller/

उत्तर

1

के लिए अपने navigationController के viewDidLoad को self.extendedLayoutIncludesOpaqueBars = true जोड़ने तुम बहुत करीब हैं सिर्फ निम्नलिखित कर प्रयास करें।

विभाजन दृश्य लेआउट को विस्तार सेग के साथ रखें और निम्न विधि के लिए सत्य लौटाएं और collapseDetailViewController चर के साथ शेष कोड को हटा दें। आप मास्टर में देखें नियंत्रक

self.splitViewController!.delegate = self; 

self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible 

self.extendedLayoutIncludesOpaqueBars = true 

अपने विवरण दृश्य नियंत्रक से self.extendedLayoutIncludesOpaqueBars = true जोड़े के रूप में पिछले जवाब ने उल्लेख किया

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
return true  
} 

निम्नलिखित रखो। इससे आपके व्यू कंट्रोलर पर दिखाई देने वाली बार को हटा देना चाहिए।

यदि आप आईपैड पर पूर्ण स्क्रीन का उपयोग करने के लिए अपना विस्तार दृश्य देखना चाहते हैं तो भी कुछ अतिरिक्त कार्यक्षमता चाहते हैं।

navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
navigationItem.leftItemsSupplementBackButton = true 
2

के लिए splitViewController के मास्टर दिखाई दे सकता है के रूप में पालन किया था, आप splitViewController के viewDidLoad में यह जोड़ने की जरूरत है। वरना मास्टर दृश्य नियंत्रक, एक पक्ष मेनू जो आप पोर्ट्रेट मोड

self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 

में खींच सकते हैं लेकिन, इस मास्टर विवरण दृश्य केवल iPhone 6 Plus और केवल ipad में दिखाए जाने वाले के रूप में मौजूद है अन्यथा, यह सिर्फ तरह कार्य करेगा एक नेविगेशन नियंत्रक। दृश्य नियंत्रक को नेविगेशन नियंत्रक को धक्का देने के लिए, आप एक नेविगेशन नियंत्रक को अन्य नेविगेशन नियंत्रक को धक्का देने की कोशिश कर रहे हैं। मुझे नहीं लगता कि इसकी सिफारिश की जाती है। दूसरे नेविगेशन नियंत्रक के बजाय, पहले दृश्य नियंत्रक (जहां आप इनपुट टेक्स्ट) से सेग्यू को दूसरे (रंग दृश्य नियंत्रक) से ले जाएं। यदि आप आईपैड और आईफोन 6 के लिए सही सेक्शन में विवरण दिखाने में रुचि रखते हैं, और अन्य उपकरणों के लिए एक नए पेज के रूप में, आपको इस तरह से उपयोग नहीं करना चाहिए, पुश सेगू को हटाएं और डेटा को बदलकर डेटा रीफ्रेश करने के लिए एक प्रतिनिधि का उपयोग करें यूआई।

Storyboard screenshot

इसके अलावा, मुझे नहीं लगता कि आप, सिर्फ रंग ViewController पर्याप्त हो सकता है, अगर आप विवरण पृष्ठ से आगे नेविगेशन में कोई दिलचस्पी नहीं कर रहे हैं विवरण पृष्ठ के रूप में एक navigationController आवश्यकता हो सकती है है।

iphone और iPad में विभाजित दृश्य नियंत्रक के व्यवहार के बारे में विस्तृत जानकारी के लिए, बस की जाँच https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

अंतराल मुद्दा

+0

तो मैं सब कुछ तुमने कहा किया है, यहां तक ​​कि raywenderlick ट्यूटोरियल (पहले से ही ऐसा पहले किया) को देखा और देखें कि यह कैसे सेब करना एक मास्टर विस्तार के रूप में एक नई परियोजना का निर्माण किया। सभी उदाहरणों में यह है कि विवरण दृश्य पहले दिखाया गया है, फिर आप मास्टर पर वापस जाते हैं - जो मुझे कोई समझ नहीं आता है, उदाहरण के लिए सेटिंग एप को देखें, जिसे आप श्रेणी चुनते हैं, पहले सामान्य सेटिंग्स लोड नहीं करते हैं, फिर श्रेणियों पर वापस जाएं। विस्तार दृश्य अभी भी मास्टर विंडो में लोड हो गया है और अब दो निचले सलाखों हैं :(मास्टर एटीएम में एकमात्र कोड 'self.splitViewController है? .preferredDisplayMode =। स्वचालित' –

+0

, तो विवरण ViewController नहीं दिखाएं। इसे MasterViewController में करें 'didSelectRowAtIndexPath'। मैंने अपने ऐप के लिए क्या किया था, आईपैड और आईफोन के लिए 2 स्टोरीबोर्ड था, बिना स्प्लिट व्यू कंट्रोलर के। और – shinoys222

+0

डीटिलवीसी के नेविगेशनबार में एक्शन का विभाजन स्प्लिटवीसी या मास्टर के – shinoys222