我正在使用带有两个自定义布局的UICollectionView - 它们是子类 UICollectionViewFlowLayout
当我的视图首次加载时,我使用以下命令将其设置为默认视图:
[self.collectionView setCollectionViewLayout:self.tableViewLayout];
Run Code Online (Sandbox Code Playgroud)
这叫:cellForItemAtIndexPath- 所以没问题.这是viewWillAppear方法.
然后我使用UIButton将布局从当前视图更改为下一个布局,如下所示:
-(void)changeViewLayoutButtonPressed
{
self.changeLayout = !self.changeLayout;
if (self.changeLayout){
[self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES];
}
else {
[self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
在此呼叫之后 - numberOfItemsInSection被呼叫.我已在调试器中检查了返回帐户不为零.
在那次调用之后,没有其他任何东西被调用,我的UICollectionView改变了布局但是因为cellForItemAtIndexPath没有被调用 - 单元格没有正确设置.
如果我把[self.collectionView roloadData]里面numberOfItemsInSection-那么cellForItemAtIndexPath被称为和细胞设置.
我不需要手动调用来重新加载数据numberOfItemsInSection.谁能告诉我发生了什么事?
编辑
我忘了提到我正在为两个不同的单元格使用两个不同的UINib,因为它们需要稍微不同的布局应用于它们.这会是一个问题吗?谢谢!
编辑2
是的,所以我已经让它像我想要的那样工作.以下是用于集合视图的所有代码以及我如何更改其布局.
自定义布局
这些是子类UICollectionViewFlowLayout- 我分类的原因仅仅是因为我的UICollectionView需要看起来和表现非常接近Apple的预制布局.但是,只是不同的单元格大小.
TableViewLayout - 头文件中没有代码. - BBTradeFeedTableViewLayout.m
@implementation BBTradeFeedTableViewLayout
-(id)init
{
self = [super init];
if (self){
self.itemSize = …Run Code Online (Sandbox Code Playgroud) 我正在使用Room作为应用程序的数据库.我有一个场景,其中Object某种类型需要存储在单独的表中.举个例子,让我们来Object看看Book.java
现在,我想要两个SQL表:
请忽略SQL DB的任何命名约定 - 这只是一个例子
问题
通常,人们只会@Entity(tableName = "Books_Read")在Book.java类中使用并拥有一个DAO将使用该表名的类.
事情是; 那么我怎么能够使用相同的Book.java类来存储在Books_To_Read表中?因为我已经定义@Entity(tableName = "Books_Read")为Book.java类的一部分,我看不到在哪里定义类的Books_To_Read表Book.java
我能够提出的唯一解决方案是创建一个新类 - 让我们称之为在类BookToRead.java 中扩展Book.java和定义@Entity(tableName = "Books_To_Read")的新类.
题
有没有更好的方法来做到这一点,或者这是处理它的预期方法?
我在iOS7中忙于UICollectionView.
我正在两个不同的布局之间更改我的集合视图的布局.这是UICollectionViewFlowLayout的子类.
这是我点击按钮时更改视图的方式:
-(void)changeViewLayoutButtonPressed
{
self.changeLayout = !self.changeLayout;
if (self.changeLayout){
[self.tableViewLayout invalidateLayout];
[self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES];
}
else {
[self.grideLayout invalidateLayout];
[self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
此方法按预期工作,并使用漂亮的动画更改视图.但是在控制台中我收到这些消息:
快照未呈现的视图会导致空快照.确保在屏幕更新后快照或快照之前至少渲染了一次视图.
关于是什么导致这个的任何想法?
我正在忙着构建一个应用程序 - 当它第一次启动它时会要求用户做两件事:
从那里它进入家庭视图控制器.
我目前面临的问题是将第一个视图控制器从我的应用代表推送到屏幕上.我正在使用故事板/ Xcode 5/iOS7
这是我提出的代码:
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
BBCounterySettingsViewController *controller = (BBCounterySettingsViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"CountrySettings"];
[navigationController pushViewController:controller animated:NO];
Run Code Online (Sandbox Code Playgroud)
问题是当应用程序遇到以下错误时遇到最后一行代码时崩溃:
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UIViewController pushViewController:animated:]:无法识别的选择器发送到实例0x8e9a400'
任何人都有任何想法我做错了什么?
我正在开发一个具有以下功能的应用程序UICollectionView- 集合视图的工作是显示来自Web服务的数据.
我试图实现的应用程序的一个功能是使用户能够将其布局UICollectionView从网格视图更改为表格视图.
我花了很多时间来完善这个,并设法让它发挥作用.但是有一些问题.两个布局之间的转换看起来不太好,有时它在切换视图之间断开,我的应用程序留下了处于意外状态的视图.只有当用户在网格和表格视图之间快速切换(changeLayoutButton连续按下)时才会发生这种情况.
所以,显然存在一些问题,我觉得代码有点脆弱.我还需要解决上面提到的问题.
我将从如何实现此视图开始.
履行
因为我需要两个不同的单元格(grideCell和tableViewCell)来显示不同的东西 - 我认为继承它会更好,UICollectionViewFlowLayout因为它可以完成我需要的一切 - 我需要做的就是改变单元格大小.
考虑到这一点,我创建了两个子类 UICollectionViewFlowLayout
这就是这两个类的外观:
BBTradeFeedTableViewLayout.m
#import "BBTradeFeedTableViewLayout.h"
@implementation BBTradeFeedTableViewLayout
-(id)init
{
self = [super init];
if (self){
self.itemSize = CGSizeMake(320, 80);
self.minimumLineSpacing = 0.1f;
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
BBTradeFeedGridViewLayout.m
#import "BBTradeFeedGridViewLayout.h"
@implementation BBTradeFeedGridViewLayout
-(id)init
{
self = [super init];
if (self){
self.itemSize = CGSizeMake(159, 200);
self.minimumInteritemSpacing = 2;
self.minimumLineSpacing = 3;
}
return self;
}
@end …Run Code Online (Sandbox Code Playgroud) 我一直试图将这个SDK安装到我的iOS项目中,但没有取得多大成功.
首先,我尝试使用此处的设置说明手动安装它:https://firebase.google.com/docs/ios/setup#initialize_firebase_in_your_app
但是,在readme完全按照文件后,当我尝试使用此代码时:
[FIRApp configure];
Run Code Online (Sandbox Code Playgroud)
导入Firebase.h到头文件后,它无法识别,FIRApp并且原因似乎是我从框架中丢失文件,因为FIRApp.h标题中不存在这些文件.
所以,我采取了非常讨厌的Cocoapods安装.一切都安装得很好,并且在pod install零件期间没有显示任何警告.但是,当我添加以下代码时:[FIRApp configure];我出现了一个不同的错误:
架构x86_64的未定义符号:
"_ OBJC_CLASS _ $ _ FIRApp",引自:AppDelegate.o中的objc-class-ref
对于我的生活,我无法弄清楚这一点.我使用各种解决方案搜索了Google和SO,但这些解决方案没有帮助.
我想让它与Cocoapods一起工作,因为我已经完成了现在安装它的所有腿部工作.
似乎我遇到了像图标一样简单的问题.
我正在为iOS7构建应用程序,因此,设备是视网膜显示器(不包括iPad 2).所以我为我的tabbar制作了一些60 x 60的图标.然而,这些太大了.并且30 x 30有点像素化.
这是一个60 x 60的图标:

有人能告诉我为什么会这样吗?
我需要重命名一个iOS项目.有没有办法在没有开始一个全新项目的情况下做到这一点?
我发现的所有其他信息都与Xcode 4或旧版本有关,这些方法似乎使项目崩溃 - 我在尝试更改任何名称之前创建了一个快照.
我在当前的iOS应用程序中使用MVVM范例.最近,我也开始使用ReactiveCocoa该项目.我现在也开始尝试了Unit testing.
我面临的问题是如何正确测试RACSignal我创建的自定义.这是我正在测试的测试信号的示例.此信号与a一起使用UItextField,并将阻止不需要的字符输入textField.在这种情况下,我只允许数字:
//Declared like so:
-(RACSignal *)onlyAllowNumbersforTextFieldSignal:(RACSignal *)signal
//used like this:
RAC(testTextField, text) = [self.viewModel onlyAllowNumbersforTextFieldSignal:testTextField.rac_textSignal];
Run Code Online (Sandbox Code Playgroud)
现在,信号在viewModel和中完美地工作viewController- 我现在只想test case为这些信号创建一个.
我有以下代码为UIBarButton我的项目添加一些s.这适用于以下情况:
全部在iOS 7.1上
我没有iPhone 5设备可以测试.
它不适用于新的iPhone 5s.有什么不同?
这是代码:
-(void)setupNavigationBar
{
self.saveSearchButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.saveSearchButton setImage:[UIImage imageNamed:@"Save Search"] forState:UIControlStateNormal];
[self.saveSearchButton setImage:[UIImage imageNamed:@"Save Search Active"] forState:UIControlStateHighlighted|UIControlStateSelected];
[self.saveSearchButton addTarget:self action:@selector(saveSearchButtonpressed)forControlEvents:UIControlEventTouchUpInside];
[self.saveSearchButton setFrame:CGRectMake(0, 0, 23, 31)];
self.changeLayutButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.changeLayutButton setImage:[UIImage imageNamed:@"View List"] forState:UIControlStateNormal];
[self.changeLayutButton setImage:[UIImage imageNamed:@"View Grid"] forState:UIControlStateHighlighted|UIControlStateSelected];
[self.changeLayutButton addTarget:self action:@selector(changeViewLayoutButtonPressed)forControlEvents:UIControlEventTouchUpInside];
[self.changeLayutButton setFrame:CGRectMake(0, 0, 23, 31)];
self.sortByButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.sortByButton setImage:[UIImage imageNamed:@"Sort By"] forState:UIControlStateNormal];
[self.sortByButton …Run Code Online (Sandbox Code Playgroud) objective-c ×8
ios ×6
ios7 ×2
iphone ×2
android ×1
android-room ×1
cocoa-touch ×1
database ×1
firebase ×1
mvvm ×1
sql ×1
uistoryboard ×1
xcode5 ×1