例如:
据我所知,这是许多应用程序的应用程序设计的"正确"方法,在分析信息时,您需要两个稍微不同的UI屏幕来显示信息.
例如,您的大多数页面都是文本,但其中一些页面也有图像(想想RSS阅读器,其中一些RSS条目有文本+图像,有些只有文本).
我之前通过使用一个NIB文件和第二个不可见的名为UIView的实例处理了这个问题,我在第一个实例的顶部分层,并根据上下文使用"隐藏"标志打开/关闭.
但这显然是错误的,浪费了记忆.
但是,我看不到从NIB文件"重新加载"视图的明显方法.我猜我想以某种方式重现initWithNibName所做的魔术?
我怀疑这是可能的,但我敢肯定,如果你以"错误的方式"做到这一点,那么该应用程序将简单地崩溃.
我有一个内部有一些简单代码的IBAction:
-(IBAction)change:(id)sender {
[textfield setHidden:NO];
[self dolengthyaction];
}
Run Code Online (Sandbox Code Playgroud)
'textfield'是nib文件中的NSTextField,-'dolengthyaction'是一个大约需要一分钟才能完成执行的函数.
我的问题是:为什么在"dolengthyaction"执行完之后才显示文本字段?我希望在dolengthyaction开始之前揭示它.这是一个固有的问题还是我的代码有问题?(或在我的代码的另一部分?)
我仍然不擅长编程,所以如果我措辞严厉并且格式错误,我会道歉.
编辑:除了这个IBAction和-dolengthyaction之外别无其他......
-(void)doLengthyAction {
sleep(10);
}
-(IBAction)change:(id)sender {
[textfield setHidden:NO];
[self doLengthyAction];
[textfield setHidden:YES];
}
Run Code Online (Sandbox Code Playgroud)
我真正想做的就是在动作运行时显示标签,并在动作完成后隐藏它.
基本上这意味着它现在还没有显示出来.
实际上,在-doLengthyAction中它不是睡眠(10)而是一个复制大约50 Mb材料的NSFileManager操作.代码相当长,但如果你想让我发布它我可以.我用sleep()测试了它,但它也不起作用.
我正在尝试制作一个始终加载相同笔尖的视图控制器.我的初始化代码如下所示:
-(id)init
{
NSString* nibName;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
nibName = @"XIB_iPad";
else
nibName = @"XIB_iPhone";
self = [super initWithNibName:nibName bundle:nil];
if (self)
{
...
}
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
return [self init];
}
Run Code Online (Sandbox Code Playgroud)
问题是该代码导致视图控制器具有零视图.我有什么问题吗?有一个更好的方法吗?
谢谢.
我向现有项目添加了一个带有接口 (.h)、实现 (.m) 文件和 UI (.xib) 的自定义视图控制器类。
当我在笔尖和界面之间按住 Ctrl 键单击并拖动时,拖动时不会放置插座或 IBAction,因此我无法将 UI 元素链接到属性。另外,当我在助理编辑器模式下查看笔尖时,XCode 不会调出相应的界面文件。
注意:我更改了自定义类的名称。我更改了文件名以及源代码中对其的引用。
有没有办法检测用户使用的设备,然后使用该信息,使应用程序使用特定的nib文件?
现在,我的代码是
- (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions{
if(isiPhone5){
self.RootViewController = @"RootViewController_iPhone5";
}
else{
self.RootViewController = @"RootViewController_iPhone4";
}
}
Run Code Online (Sandbox Code Playgroud)
我找到设备的其他代码可以工作并告诉我用户正在使用什么设备,但实际上并没有将.xib文件更改RootViewController_iPhone4.xib为RootViewController_iPhone5.xib.有没有办法做到这一点?
我不想使用自动布局,因为我想根据设备发生其他自定义事件,例如视图控制器中的不同按钮名称,如果使用的设备是iPhone 4和iPhone 5
2016-06-10 16:16:15.340 SwipePageTest[4625:434547] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/Alexk/Library/Developer/CoreSimulator/Devices/1A09A104-D0BF-44EA-8FAD-B90A3599FF8C/data/Containers/Bundle/Application/3213D8DB-6294-43C0-A4F6-AF075812EE3D/SwipePageTest.app> (loaded)' with name 'ViewControler0''
*** First throw call stack:
(
0 CoreFoundation 0x00000001087cfd85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010a573deb objc_exception_throw + 48
2 CoreFoundation 0x00000001087cfcbd +[NSException raise:format:] + 205
3 UIKit 0x00000001093bfc89 -[UINib instantiateWithOwner:options:] + 499
4 UIKit 0x00000001091918d6 -[UIViewController _loadViewFromNibNamed:bundle:] + 381
5 UIKit 0x0000000109192202 -[UIViewController loadView] + 178
6 UIKit 0x0000000109192560 -[UIViewController loadViewIfRequired] + 138
7 UIKit 0x0000000109192cd3 …Run Code Online (Sandbox Code Playgroud) 您好,在自定义UITableViewCell上使用nib或storyboard有什么区别?我打算使用具有动态高度的自定义uitableviewcell创建Facebook News Feed.使用哪个更灵活?
编辑:你为什么要对我的问题进行投票?我的帖子上没有发现问题.
以编程方式加载UIViewController子类时,如果您将任何文件命名为与子类不同的名称,则不会加载与该ViewController关联的任何nib.
自动加载的笔尖,而不通过一个字符串名来初始化的唯一途径,是确保您x.nib和class.swift具有相同的名称SubClass.
有没有解决的办法?
nib ×8
ios ×5
objective-c ×3
iphone ×2
swift ×2
xib ×2
cocoa ×1
ibaction ×1
uistoryboard ×1
uitableview ×1
uiview ×1
xcode ×1