读到现在,我已经了解到将UI元素添加到UITableViewCell的contentView是一个很好的做法.但通常,我看到这是使用代码完成的.我想知道如果使用Interface Builder添加仍然添加到contentView的元素?
今天我正在为iOS编写我的第一个"Hello World"应用程序.我想知道如何.xib以编程方式操作文件类似于Android XML布局文件或XAML?我还希望Interface Builder动态显示更改.例如我有一个.xib文件"LoginPageView.xib",其中我有按钮和我通过加入其他控制Interface Builder构造,然后我此连接.xib到专用class extension的"LoginPageViewController"在.m文件中.现在我想以编程方式添加一个新按钮:UIButton *button = [[UIButton alloc] initWithCGRect:...];或者我想更改按钮的背景等等.
我知道的唯一方法是在viewDidLoad方法中实现它,但如果我这样做,我的更改将仅在程序运行时显示,并且我希望Interface Builder在编译之前动态显示这些更改.所以问题是Xcode IDE中有哪些方法可以实现这一点并说明如何执行此操作?
考虑一种情况,即故事板文件中的对象链接到a IBOutlet,如下所示.
@property (nonatomic, strong) IBOutlet UIImageView *imageView;
Run Code Online (Sandbox Code Playgroud)
保留在自己的设备上,ViewController将很高兴地加载并在正确的框架内显示正确的图像,如Interface Builder中所确定的那样.但是,如果将以下代码添加到View Controller的viewDidLoad方法中,则会实现(显然)相同的结果.
- (void)viewDidLoad {
_imageView = [[UIImageView alloc] init];
//...
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着程序化的alloc-initing IBOutlets是完全可选的?或者这条线的增加是否会产生略微不同的结果?
我问,因为我总是在实现中添加alloc-init,然后在我的最新项目中我忘记了它,令我惊讶的是,它仍然完全符合预期.
所以我已经看过几次这个问题了,但是没有找到解决我问题的答案.现在我基本上有MainMenu.xib,标签位于顶部,一个大的自定义视图和一个位于底部的按钮,用于切换自定义视图的子视图(见下图).我已经设置了窗口和自定义视图以在界面构建器中自动调整子视图,并且所有按钮,标签等都有将它们与视图侧面相关联的约束,但是当我调整窗口大小时,子视图的内容会执行没有调整大小.我认为自定义视图正在调整窗口大小,因为当我使用按钮切换子视图时,加载的子视图会随窗口调整大小,它们只是没有实时调整窗口大小.
MainMenu.xib:

正常子视图:

窗口展开后:

子视图切换然后切换回:

约束:
MainMenu.xib:

BlockViewController.xib:

在XCode iPad应用程序中,我使用带有视图的故事板和内部的UIImageView,在Interface Builder中定义.如果我尝试使用SetFrame命令[myImageView setFrame:CgRectMake ...]更改UIImageView的位置,则图像不会更改屏幕上的位置.setFrame命令是否足够?谢谢.
我正在开发一个带有最新SDK的iOS应用程序.
我创建了一个自定义类:
#import <UIKit/UIKit.h>
@interface UICustomView : UIView
{
@private
int _counter;
}
@property (nonatomic, weak) IBOutlet UILabel* textField;
@end
Run Code Online (Sandbox Code Playgroud)
在Storyboad上我添加了一个UIView并将其类更改为UICustomView.为此,UIView我添加了一个UILabel使用Interface Builder但现在我不知道如何将它UILabel与IBOutlet自定义视图连接.
你知道我怎么办吗?
我正在尝试在单击按钮时从XIB文件加载故事板文件.所以在IBAction方法中我调用了以下行:
- (IBAction)NextView:(id)sender
{
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
[mainStoryBoard instantiateViewControllerWithIdentifier:@"StoryViewController"];
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,我收到此错误
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x88672d0>) doesn't contain a view controller with identifier 'StoryViewController''
我查看了人们在stackverflow上提出的其他问题,发现当一个人试图加载视图控制器的身份检查器中忘记将View控制器的标识符名称放入时,通常会抛出此错误.但我也这样做了.在故事板中,第一个正在加载的viewController是StoryViewController,我已将其标识符设置为相同.还有其他我可能会遗失的东西.请告诉我如何纠正它.

我正在尝试创建一个适用于3.5和4英寸iPhone的tic tac toe应用程序.但是,我没有成功地在故事板中找到如何做到这一点.我在使用XIB文件时找到了该选项,但在使用故事板时找不到模拟指标选项.有没有办法让应用程序在任一屏幕尺寸上使用时自动调整大小?感谢任何响应的人.
嘿,我已经阅读了一些关于样式细胞的教程和文章.由于界面构建器的样式功能有限,我被迫研究其他方法,并且在尝试找到以编程方式设置在界面构建器中创建的UITableViewCell的正确方式时,会留下相互矛盾的感觉.一些源直接在cellForRowAtIndexPath其他源中设置样式,建议在.m中为UITableViewCell类执行此操作.在设置样式时我遇到了一些性能问题,cellForRowAtIndexPath所以现在我在类.m文件中设置样式.以下是样式的代码:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
NSLog(@"test!");
_nameLabel.font = [UIFont fontWithName:@"Gotham Light" size:16];
_locationLabel.font = [UIFont fontWithName:@"Gotham Light" size:14];
_titleLabel.font = [UIFont fontWithName:@"Gotham Light" size:12];
[_thumbnailUserImage.layer setCornerRadius:24];
[_thumbnailUserImage.layer setBorderWidth:2];
[_thumbnailUserImage.layer setBorderColor:[[UIColor whiteColor] CGColor]];
[_thumbnailUserImage.layer setMasksToBounds:YES];
self.contentView.backgroundColor = [UIColor colorWithRed:(247/255.0) green:(245/255.0) blue:(242/255.0) alpha:1];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
这是我创建每个cellForRowAtIndexPath的地方:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
User *user;
ContactsCell *cell = [[ContactsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
cell = (ContactsCell *)[tableView dequeueReusableCellWithIdentifier:@"ContactsCell"]; …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用新的xcode 5 storyboard范例,而不是专门创建.xib文件.我有两个VC - 第一个是由Xcode创建的,第二个是通过将UIViewController放入InterfaceBuilder创建的.
我的问题是,即使我给了我的第二个VC一个自定义类并将头文件导入第一个VC,当我以编程方式创建第二个VC时,它不符合我在InterfaceBuilder中设置的设计.第一个是.
我创建第二个VC的代码是这样的(它在ImagePickerControllerDelegate方法中):
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *chosenImage = [info objectForKey:UIImagePickerControllerEditedImage];
NCPhotoViewController *newController = [[NCPhotoViewController alloc] init];
newController.theImage = chosenImage;
** NEW CODE newController.theImageView.image = newController.theImage;
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:newController animated:YES completion:NULL];
}];
Run Code Online (Sandbox Code Playgroud)
......看起来很好,做了我想要的 - 带来了一个新的视图控制器.事实是,它没有加载我在IB中设置的布局.我尝试交换alloc] init]方法,initWithNibName:bundle:但意识到我没有笔尖...有没有办法在IB中建立这种连接而不创建.xib文件,或者我误解了Xcode 5的新流程?我知道Identity Inspector中有一个Storyboard ID属性,但是如何使用它呢?如果他们没有被默认放在那里,我不想做"旧方式"的事情......
TL; DR - 我希望我的IB布局的ViewController能够在Xcode 5默认故事板流程中以编程方式调用它的方式.
添加了一些代码,使新的viewcontroller的imageview有一个图像,但它没有出现...
编辑:我不得不添加self.theImageView.image = theImage;的viewDidLoad方法在我的新viewcontroller.h文件-但不应该它已经做到这一点的代码,我写的吗?
ios ×9
objective-c ×4
xcode ×4
iphone ×2
storyboard ×2
uistoryboard ×2
uitableview ×2
iboutlet ×1
macos ×1
uiimageview ×1
xcode5 ×1
xib ×1