我为iPhone和iPhone创建了两个单独的xib。 iPad兼容。从iPad xib我给viewcontroller提供参考插座。
我想要的是:我想在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!
答案 0 :(得分:4)
只需创建以下结构。
无需在运行时识别要加载的xib。
通过使用~ipad,它会自动识别。
我想要的是:我想将这些参考插座用于iPhone xib。
只需从iPad xib复制该视图控制器并将其放入iPhone xib
即可保持“自由”的大小
现在,您可以调整UI组件的大小,并且所有插座都是相同的。
答案 1 :(得分:2)
只需将文件所有者从iPhone xib设置为Interface Builder中的类。然后将参考拖动到您的插座。 在运行时,您可以选择要加载的xib。
更新: Swift代码:
adb shell am start -n com.example/.MainActivity
答案 2 :(得分:0)
是的,只要您根据设备加载xib,它就可行了。
即,通过代码处理nib加载。
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)
}
}
答案 3 :(得分:0)
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 :(得分:0)
我在查看加载之前实现了这些逻辑。 Swift代码在这里:
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 :(得分:0)
这对我有效,在Xcode 10,iOS 12,Swift 4:
override func loadView() {
super.loadView()
if UIDevice.current.userInterfaceIdiom == .phone {
Bundle.main.loadNibNamed("DetailsViewController", owner: self, options: nil)
} else {
guard let iPadXib = Bundle.main.loadNibNamed("DetailsViewController~iPad", owner: self, options: nil) else { return }
self.view.addSubview((iPadXib[0] as! UIView))
}
}
答案 6 :(得分:-2)
我认为您有以下文件...
ViewController.h
ViewController.m
ViewController-iPad.xib // For iPad
ViewController-iPhone.xib // For iPhone
添加以下微型
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 0 : 1)
#define LOAD_XIB(xibName) (IS_IPHONE ? [NSString stringWithFormat:@"%@-iPhone",xibName] : [NSString stringWithFormat:@"%@-iPad",xibName])
*IS_IPHONE - Check if device is iPhone or not
*LOAD_XIB - this micro use for load xib
第一种方法->您可以像这样使用LOAD_XIB()
micro ...
[[[NSBundle mainBundle]loadNibNamed:Load_Xib(@"ViewController") owner:self options:nil] objectAtIndex:0];
第二种方式->您也可以像这样加载笔尖...
if(IS_IPHONE)
{
[[[NSBundle mainBundle]loadNibNamed:@"ViewController-iPhone" owner:self options:nil] objectAtIndex:0];
}
else
{
[[[NSBundle mainBundle]loadNibNamed:@"ViewController-iPad" owner:self options:nil] objectAtIndex:0];
}