我是iOS开发的新手,我只是UITableViewController在故事板中.我想用一些按钮添加一个顶栏,怎么做?
请注意,我正在使用由"Storyboard"创建的UITabBar,而我的ITableViewController是UITabBar的一个项目.
我的主视图控制器在导航控制器中,它符合EditViewControllerDelegate协议.它是我的两个视图控制器的代表,我需要以模态方式呈现.
@interface EditViewController : UIViewController
@property (nonatomic) id <EditViewControllerDelegate> delegate;
@end
@interface EditSomethingViewController : EditViewController
@end
@interface EditSomethingElseViewController : EditViewController
@end
Run Code Online (Sandbox Code Playgroud)
在一个 editViewController:(EditViewController *)evc didFinishEditing:(Something *) something 方法中,我首先得到我需要的数据然后我解雇evc并调用
[self performSegueWithIdentifier:@"My Segue" sender:self];
Run Code Online (Sandbox Code Playgroud)
"My Segue"在Xcode中定义,标识符在代码和Xcode中都是相同的(我试图改变它只是为了看它是否被调用并引发异常)
当我改变"我的Seque"的类型推动时,它起作用了.但是在使用模态后,它在我回到主视图控制器后没有做任何事情
我错过了什么?
编辑:
我不小心在故事板上发现了一个警告!(这很奇怪,因为它不是项目中的警告"从任何地方都可见")在"引用故事板Segues"下的连接检查器中,我的模态segue有一个警告.它说 :
(null) is not a valid containment controller key path
Run Code Online (Sandbox Code Playgroud)
我检查了其他模态segue并且有相同的警告,但我不需要通过代码触发它们,所以之前没有问题.
编辑2:
-(void)editViewController:(EditViewController *) evc
didFinishEditing:(Something *) something
{
self.something = something;
[self dismissModalViewControllerAnimated:YES];
For ( OtherThing * otherThing in self.something.otherthingsArray)
{
NSLog(@"%@", otherThing);
}
[self performSegueWithIdentifier:@"My Segue" …Run Code Online (Sandbox Code Playgroud) 我遇到了一个项目有多个开发人员在同一个storyboard文件上工作的问题.当开发人员将控制器添加到他们自己的故事板版本时,需要合并文件.当我在合并期间以纯文本格式查看故事板时,我无法理解我应该接受哪些更改以及以何种顺序.
是否有某种教程或指南如何从同一故事板的版本进行合并更改?如何管理由多个开发人员制作的同一故事板的更改?
谢谢!
我的文字在纵向模式下是两行.当我切换到横向模式时,它适合单行.我通过故事板使用静态tableview单元格; 我怎样才能调整行的大小以适应?
屏幕是一个登录屏幕.
背景:git - 或任何其他SCM - 可以"成功"合并Storyboard,xib和pbxproj文件,因为它们只是xml.有时可以通过通常的冲突解决策略来解决冲突.但是xib和Storyboard是一些非常复杂的数据结构的序列化格式,所以开始有趣.
与其他源代码一样,成功合并并不能保证所有合并的更改一起正常工作.对于有问题的文件,git可以成功合并,但是当您尝试打开它时,Xcode有时会显示"无法读取存档"错误 - 即合并损坏了xib.
我已经看到有关git忽略.xibs(不实用)的建议,或者.gitattributes通过设置禁用diff
*.xib -crlf -diff
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这可以修复合并冲突/损坏的xib问题 - 但现在有人的更改会丢失吗?
同样,我在项目文件中看到的最佳建议是.gitattributes中的merge = union:
*.pbxproj merge=union
Run Code Online (Sandbox Code Playgroud)
问题:我搜索了很多,似乎没有一个好的解决方案.有经验的人能告诉我在一些用例中会发生什么吗?
在项目中,我将文件从x重命名为y,并删除fileA.同时,另一位程序员提交了更改以添加fileC并删除fileD.合并的结果是什么?我确定实际的文件系统更改是正确的,但在Xcode导航器面板中:
如果git忽略.xib文件 - 我是否至少会收到一个警告:文件已更改且未被处理?
我在导航控制器中嵌入了一个UICollectionView控制器.collectionView列出项目,每个单元格应该转到ProjectDetail屏幕.
我根本无法触发segue.如果我只是在导航栏上放下一个按钮并将一个segue连接到细节,它就可以工作.但是从我的CollectionView单元格触发却没有.
这是故事板的样子:http://cl.ly/RfcM 我有一个从CollectionViewCell连接到ProjectDetailViewController的segue
这是我的ProjectDetailViewController中的相关代码:
@interface ProjectCollectionViewController () {
NSArray *feedPhotos;
Projects *projects;
}
@end
@implementation ProjectCollectionViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.collectionView registerClass:[FeedViewCell class] forCellWithReuseIdentifier:@"cell"];
[self loadData];
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"selected %d", indexPath.row);
Project *project = [projects getProject:indexPath.row];
NSLog(@"project = %@", project);
}
- (void)loadData {
[self.projectLoader loadFeed:self.username
onSuccess:^(Projects *loadedProjects) {
NSLog(@"view did load on success : projects %@", loadedProjects);
projects = loadedProjects;
[self.collectionView reloadData];
}
onFailure:^(NSError *error) {
[self handleConnectionError:error];
}]; …Run Code Online (Sandbox Code Playgroud) 我正在寻找Xcode 6中的对象库,以便UIVisualEffectView在Storyboard中添加模糊.我知道如何以编程方式执行此操作,但我无法在Storyboard中找到这样做的方法.
这在目前的测试版中是不可用的,还是有办法做到这一点并不是那么简单?
我正在使用大小类来创建一个故事板,可以针对所有不同的屏幕尺寸和方向.我一直在Any Width-Any Height size类中工作.我遇到了显示问题并决定在Compact Width - Regular Height size类中进行这些更改.稍后,通过对Any Width-Any Height size类进行约束更改,我能够解决布局问题.如何还原对"紧凑宽度" - "常规高度"大小类所做的更改,以便在运行时使用"任意宽度 - 任何高度"类,而无需手动还原更改?
目标:我正在尝试在基于选项卡控制器的应用程序上恢复状态(每个选项卡上都有导航控制器).
问题:重新启动时,所选选项卡似乎按预期还原,但所选选项卡内的导航层次结构不是.
发展:
application(_:shouldSaveApplicationState:)和application(_:shouldRestoreApplicationState:).然后我运行应用程序,切换到第二个(右)选项卡,点击主页,终止.重新启动,显示右侧选项卡(如预期).到现在为止还挺好.
我运行应用程序,恢复仍然有效.还好.
接下来,我添加一个"细节"视图控制器; 它的类是UIViewController故事板的自定义子类,具有配置调试标签内容及其视图背景颜色的属性.
我在每个选项卡的顶视图控制器上放置了一个"显示详细信息..."按钮,并从每个选项卡创建一个segue到(共享)详细视图控制器中.所以现在我的故事板看起来像一个六边形(同样,两个segues都有在Interface Builder中设置的标识符).因此,左右顶视图控制器共享相同类型的"细节"视图控制器.在展示中,它被配置为区别于它被推动的位置(参见下一点).
在每个顶视图控制器的prepareForSegue(_:sender:)方法中,我以不同的方式配置推送的细节视图控制器:不同的文本和背景颜色(分别为"左"和"蓝","右"和红色).
我将代码添加到详细视图控制器以保存和恢复文本和背景颜色属性的状态:encodeRestorableStateWithCoder(_:)和decodeRestorableStateWithCoder(_:).此外,我实现了viewDidLoad()以便在视图中反映这些属性的值.每当它被实例化并通过segue推入导航时,首先设置属性然后用于配置视图viewDidLoad().无论何时在恢复期间实例化,都会设置属性decodeRestorableStateWithCoder(_:)并类似地使用viewDidLoad().
...但是当我运行此代码时,最后选择的选项卡将被恢复,但仅限于顶视图控制器 - 左侧或右侧 - 而不是详细信息.有趣的是,最后设置为细节视图控制器的背景颜色瞬间闪烁.
我放置断点中encodeRestorableStateWithCoder(_:)和decodeRestorableStateWithCoder(_:),但只有其中第被执行(编码).
application(_:viewControllerWithRestorationIdentifierPath:coder:)(总是返回nil,但是记录了传递的路径组件).关于是否需要这种方法的文档不是很清楚,并且在任何情况下,除了细节之外的所有视图控制器似乎都可以完美地恢复,即使没有它.我添加了代码,根据最后一个路径组件(即该控制器的恢复ID)实例化每个视图控制器并返回它.
现在,它decodeRestorableStateWithCoder(_:) 被调用,但导航仍然会在瞬间返回到选项卡的顶视图控制器.
那么发生了什么?在Tab栏+导航控制器应用程序中实现状态保存和恢复我缺少什么?
我一直在研究Matt Nueberg的编程iOS 7书,并且正在努力理解与约束方向有关的东西.在本书的第28页,在本multiplier, constant节中,作者说:
第一个属性设置为结果.
所以我读这个的方式是,当存在两个项目约束时,项目1是基于项目2的值导出或依赖的.
所以我有一个视图和一个子视图(按钮),我想水平居中按钮.所以我安排了我的视图和按钮,然后从按钮控制拖动到父视图:

并选择Center Horizontally:

然后,如果我选择该约束,我会在右侧的属性检查器中看到以下内容:

这将超级视图显示为项目1,将按钮显示为项目2.这是否意味着它会尝试调整超视图的中心以匹配按钮的中心?那不是我想要的.或者我误解了第1项和第2项的含义?或者它是否意味着我做了控制 - 向后拖动,你应该从依赖拖到依赖,而不是像我那样依赖依赖到依赖?
我认为订单确实很重要,也就是说,它是第1项,也是第2项.因为有一个菜单选项来交换这两个.如果它只是一个对调整后的内容没有偏好的解算器,那就没有必要了.
uistoryboard ×10
ios ×8
xcode ×2
xcode4.3 ×2
autolayout ×1
git ×1
ios5 ×1
ios7 ×1
ios8 ×1
ios9 ×1
iphone ×1
segue ×1
size-classes ×1
svn ×1
swift ×1
uitableview ×1
xcode5 ×1
xcode6 ×1
xib ×1