Можем ли мы использовать два отдельных xib для iPhone и iPad для одного контроллера просмотра?
Автор вопроса: Srikanth AdavalliОтветов: 7
Я создал два отдельных xib для iPhone и iPad. С iPad xib я дал ссылку на контроллер просмотра.
Что я хочу, так это: я хочу использовать эти эталонные розетки для iPhone xib.
Примечание. Я не хочу использовать классы размеров.
@IBOutlet weak var zoomButton: UIButton!
var delegate: FlipsideViewControllerDelegate? = nil
@IBOutlet var scrollView: UIScrollView!
@IBOutlet var sliderPlotStrip: F3PlotStrip!
@IBOutlet var scrollView2: UIScrollView!
@IBOutlet var sliderPlotStrip2: F3PlotStrip!
@IBOutlet var detailsButton: UIButton!
@IBOutlet var analyzeButton: UIBarButtonItem!
Если у вас есть 2 XIB, то будут присутствовать два соединения IBOutlet. Reshmi Majumder 27.07.2016
@ReshmiMajumder Я не хочу создавать отдельные эталонные точки для каждого xib. Там в любом случае ? Srikanth Adavalli 27.07.2016
Если у вас есть 2 XIB, вам нужно соединить 2 выхода, иначе с одной раскадровкой используйте классы размера Reshmi Majumder 27.07.2016
Вы можете сделать что-то вроде этого (2 XIB с одним классом - при условии, что XIB имеют в основном похожие элементы - дважды подключены к обоим XIB - 1 выход в классе подключен к обоим XIB) if (iphone) { [[ClassA alloc] initWithNibName:@ClassA~ пакет iphone: ноль]; } else { [[ClassA alloc] initWithNibName:@ClassA~iad bundle:nil]; } RJE 27.07.2016
Не будет необходимости определять во время выполнения, в какой xib загружать.
Используя ~ipad, он распознает его автоматически.
Что я хочу, так это то, что я хочу использовать эти эталонные розетки для iPhone xib.
Просто скопируйте этот контроллер представления с iPad xib и поместите его в iPhone xib.
Сохранить размер до "Свободы"
Теперь вы сможете изменять размеры компонентов пользовательского интерфейса, и все выходы будут одинаковыми.
Ответ 2 · рейтинг 2 · jenthone
Просто установите владельца файла с iPhone xib на свой класс в Interface Builder. Затем перетащите ссылку на ваш выход. Во время выполнения вы можете выбрать, какой xib загружать.
ОБНОВЛЕНО: Быстрый код:
switch UIDevice.currentDevice().userInterfaceIdiom {
case .Phone:
// It's an iPhone
case .Pad:
// It's an iPad
case .Unspecified:
//
}
Ответ 3 · Himanshu padia
if UIDevice.currentDevice().userInterfaceIdiom() == .Phone {
// If iPhone 5 or new iPod Touch
if UIScreen.mainScreen().bounds.size.height == 568 {
var myViewController: UIViewController = UIViewController(nibName: "ViewControllerExt", bundle: nil)
} else {
// Regular iPhone
var myViewController: UIViewController = UIViewController(nibName: "ViewController", bundle: nil)
}
// If iPad
}
else {
var myViewController: UIViewController = UIViewController(nibName: "ViewControllerPad", bundle: nil)
}
Перетащите ссылки на вашу торговую точку на iPhone или iPad.xib. Не нужно создавать отдельные IBOutlet, просто создайте один и привяжите его к обоим .xib
Ответ 4 · Srikanth Adavalli
Я реализовал эту логику перед загрузкой просмотра. Свифт-код здесь:
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Phone {
let controller = FlipsideViewController(nibName: "FlipsideViewController_iPhone", bundle: nil)
self.presentViewController(controller, animated: true, completion: { _ in })
}
else
{
let controller = FlipsideViewController(nibName: "FlipsideViewController", bundle: nil)
self.presentViewController(controller, animated: true, completion: { _ in })
}
Ответ 5 · Tesan3089
Да, это выполнимо, если вы загружаете xib на основе устройства.
т. е. обрабатывать загрузку пера с помощью кода.
Решение в Swift:
class ViewController: UIViewController {
@IBOutlet weak var deviceLabel : UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadFromNib()
}
func loadFromNib() {
//Detecting Xib name by device model
let nib = (UIDevice.currentDevice().model == "iPad") ? "iPad" : "iPhone"
//Loading the nib
let v: UIView = UINib(nibName: nib, bundle: nil).instantiateWithOwner(self, options: nil)[0] as! UIView
//Adding the loaded nib to viewcontroller's subview
view.addSubview(v)
}
}
Ответ 6 · Joe M
Это сработало для меня на Xcode 10, iOS 12, Swift 4: