Ios 我们可以使用两个单独的xib';s代表iPhone&;一个可视控制器的iPad
我为iPhone和iPad创建了两个独立的xib。从iPad xib中,我给出了viewcontroller的参考插座 我想要的是:我想使用这些iPhone xib的参考插座 注意:我不想使用大小类Ios 我们可以使用两个单独的xib';s代表iPhone&;一个可视控制器的iPad,ios,swift,xcode,ipad,xib,Ios,Swift,Xcode,Ipad,Xib,我为iPhone和iPad创建了两个独立的xib。从iPad xib中,我给出了viewcontroller的参考插座 我想要的是:我想使用这些iPhone xib的参考插座 注意:我不想使用大小类 @IBOutlet weak var zoomButton: UIButton! var delegate: FlipsideViewControllerDelegate? = nil @IBOutlet var scrollView: UIScrollView! @IBOutlet var sli
@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!
是的,只要您基于设备加载xib,这是可行的 i、 例如,通过代码处理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)
}
}
是的,只要您基于设备加载xib,这是可行的 i、 例如,通过代码处理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)
}
}
只需在Interface Builder中将文件所有者从iPhone xib设置为您的类。然后将引用拖动到您的出口。 在运行时,您可以选择加载哪个xib 更新: Swift代码:
switch UIDevice.currentDevice().userInterfaceIdiom {
case .Phone:
// It's an iPhone
case .Pad:
// It's an iPad
case .Unspecified:
//
}
只需在Interface Builder中将文件所有者从iPhone xib设置为您的类。然后将引用拖动到您的出口。 在运行时,您可以选择加载哪个xib 更新: Swift代码:
switch UIDevice.currentDevice().userInterfaceIdiom {
case .Phone:
// It's an iPhone
case .Pad:
// It's an iPad
case .Unspecified:
//
}
拖动iPhone
或iPad
.xib
的插座参考。无需创建单独的IBOutlet
只需创建一个并将其绑定到两个.xib
拖动
iPhone
或iPad
.xib
的插座参考。无需创建单独的IBOutlet
只需创建一个并将其绑定到两个.xib
只需创建以下结构即可
- ViewController.swift
- ViewController.xib
- ViewController~ipad.xib
现在,您可以调整UI组件的大小,所有插座都将位于相同的位置。只需在结构下方创建
- ViewController.swift
- ViewController.xib
- ViewController~ipad.xib
现在,您可以调整UI组件的大小,所有插座都将处于相同的位置。在查看加载之前,我实现了这些逻辑。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 })
}
我在视图加载之前实现了这些逻辑。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 })
}
我想你有以下文件
ViewController.h
ViewController.m
ViewController-iPad.xib//适用于iPad
ViewController-iPhone.xib//适用于iPhone
添加以下micro
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 0 : 1)
#define LOAD_XIB(xibName) (IS_IPHONE ? [NSString stringWithFormat:@"%@-iPhone",xibName] : [NSString stringWithFormat:@"%@-iPad",xibName])
*是否为IPHONE-检查设备是否为IPHONE
*LOAD_XIB-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];
}
第二种方式-->也可以像这样加载nib
[[[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];
}
我想你有以下文件
ViewController.h
ViewController.m
ViewController-iPad.xib//适用于iPad
ViewController-iPhone.xib//适用于iPhone
添加以下micro
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 0 : 1)
#define LOAD_XIB(xibName) (IS_IPHONE ? [NSString stringWithFormat:@"%@-iPhone",xibName] : [NSString stringWithFormat:@"%@-iPad",xibName])
*是否为IPHONE-检查设备是否为IPHONE
*LOAD_XIB-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];
}
第二种方式-->也可以像这样加载nib
[[[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];
}
在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))
}
}
在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))
}
}
如果您有2个XIB,则将存在两个IBOutlet连接。@ReshmiMajumder我不想为每个XIB创建单独的参考插座。有什么办法吗?如果你有2个XIB,那么你需要连接2个插座,否则使用一个故事板大小的类你可以这样做(2个XIB和一个类-假设XIB有大部分相似的项目-连接两个XIB-类中的1个插座连接两个XIB)如果(iphone){[[ClassA alloc]initWithNibName:@“ClassA~iphone”bundle:nil];}否则{[[ClassA alloc]initWithNibName:@“ClassA~iad”bundle:nil];}如果您有2个XIB,则将存在两个IBOutlet连接。@reshmiMajumber我不想为每个XIB创建单独的参考插座。有什么办法吗?如果你有2个XIB,那么你需要连接2个插座,否则使用一个故事板大小的类你可以这样做(2个XIB和一个类-假设XIB有大部分相似的项目-连接两个XIB-类中的1个插座连接两个XIB)如果(iphone){[[ClassA alloc]initWithNibName:@“ClassA~iphone”bundle:nil];}另外{[[ClassA alloc]initWithNibName:@“ClassA~iad”bundle:nil];}在问题中,您是否看到任何
objective-c
标记?抱歉,我只是提供了一些更好的东西。。。语言不重要。逻辑和流程应该很重要。在问题中,你看到任何objective-c
标签了吗?对不起,我只是提供了一些更好的东西。。。语言不重要。逻辑和流程应该是重要的。