我正在尝试UIPopoverPresentationController在我的iPhone应用程序中实现新功能(使用Objective C).我想要的是一个简单的popover,其中包含一个从启动按钮发出的tableview.
- 编辑 -
这是我的修订代码,改编自文档中的研究,SO,以及下面评论中的输入:
- (IBAction)selectCategoryBtn:(UIButton *)sender
{
[self performSegueWithIdentifier:@"CatSelectSegue" sender:self.selCatButton];
}
-(void) prepareForSegue:(UIStoryboardSegue *) segue Sender:(id) sender
{
if (sender == self.selCatButton)
{
if ([segue.identifier isEqualToString:@"CatSelectSegue"])
{
UIPopoverPresentationController *controller = segue.destinationViewController;
controller.delegate = self;
controller.sourceView = self.selCatButton;
controller.sourceRect = self.selCatButton.frame;
}
}
}
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
Run Code Online (Sandbox Code Playgroud)
这是我的故事板连接:

然而,这只是以模态方式呈现一个桌面视图,从底部上升并消耗整个屏幕.
我用谷歌搜索了,看起来都是如此,但看起来我并不是唯一一个被我希望解决iPhone烦恼问题所迷惑的人.
任何人都可以看到我的代码中的故障或指导我一个明确的教程?我看过了,但也许API是如此新的没有人能够掌握它.
谢谢!
第二次编辑:
以下是上述代码的结果.我减少了视图控制器中的tableview的大小,我希望将其作为弹出窗口呈现.我把背景涂成灰色,只是为了澄清出现的是什么,而不是弹出窗口.

我想将一个UIColor对象作为属性存储在Core Data实体上,然后检索它并以与我在该实体上执行其他属性相同的方式使用它.
在我的研究中,虽然文献看起来很稀疏,但我发现这篇文章说该属性应该被指定为"可转换",并且数据应该在使用NSKeyedArchiver和出现时手动转换NSKeyedUnarchiver.
但后来,我找到了一篇更新的帖子说,所有必要的是将UIColor保存为CD中的Transformable属性,生成一个Managed Object子类,并像其他属性一样使用.
在苹果文档本身进入一些细节上的存储和检索NSColor上的对象,而不是(我能找到)UIColor.但是,它听起来像归档/取消归档在CD中自动处理.也许.我被这条线弄糊涂了:
如果您在Xcode中使用模型编辑器,请在属性的"类型"弹出窗口中选择"可变换",然后在"值变换器名称"文本字段中键入名称.
我假设他们正在谈论属性的名称,但我不确定,特别是因为它警告明确指定变换器可能引起的问题:
要点:虽然默认转换器是NSKeyedUnarchiveFromDataTransformerName指定的转换器,但实际上反向使用此转换器.如果明确指定默认转换器,Core Data将"以错误的方向"使用它.
我已经达到了这样的程度:我有一个名为"color"的新的可转换属性(没有命名变换器)并且生成了一个包含新"color"属性(类型id)的新子类文件.
我只是简单地困惑.有人可以给我一些关于如何从这里开始的明确指导吗?
如果重要的话,我正在使用MagicalRecord与Core Data进行交互.
非常感谢您的帮助!
我有一个简单的程序,需要记录并持久存储每次用户在表视图中选择项目时产生的2个简单数据.这两个数据是1)tap()的时间NSDate和2)tapped项目的名称(NSString).此时,此信息采用以下形式:
TimerEvent *latestTappedEvent = [[TimerEvent alloc] init];
latestTappedEvent.timeTapped = NSDate.date;
latestTappedEvent.activityTapped = tappedItem.itemName;
Run Code Online (Sandbox Code Playgroud)
这两个数据必须保持相互关联.
我的问题是:
如何按时间顺序将这些数据输入和输出plist?
在我的研究中,我只是变得更加困惑.对我来说,如何使用plist并不明显.最初,我认为我可以使用NSMutableDictionarywith latestTappedEvent.timeTapped作为键,latestTappedEvent.activityTapped作为值.但是当我尝试手动构建plist时,似乎不可能,而是想要一个字符串作为键.
如果有人能帮助我理解这一点,最好通过给出这些不同元素之间关系的图形表示,我将永远感激不尽.
我正试图获得两个NSDates之间的时间间隔,即previousActivity.stopTime和previousActivity.startTime.我在这段代码中收到错误:
NSTimeInterval *previousActivityDuration = [previousActivity.stopTime timeIntervalSinceDate:previousActivity.startTime];
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
"Initializing 'NSTimeInterval *' (aka 'double *') with an expression of incompatible type 'NSTimeInterval' (aka 'double')"
我不明白; 如果NSTimeInterval又名'double',初始化表达式如何不兼容,我该如何解决?
非常感谢!
编辑:
根据@Rmaddy的评论,我删除了星号.然后我立即在以下行中收到此错误:
Assigning to 'NSNumber *' from incompatible type 'NSTimeInterval' (aka 'double')
这是违规行:
previousActivity.duration = previousActivityDuration;
Run Code Online (Sandbox Code Playgroud) 我构建了我认为是一个简单的程序来探索CoreData关系的问题.
但是,这两种方法在segue之后意外循环(并成功到达目的地VC).涉及的方法是numberOfRowsInComponent(循环4次数)和titleForRow(循环5次数),NSLog在继续之前创建此输出:
2014-03-01 12:12:26.231 EntitiesAndRelationships[64785:a0b] Number of categories is 2
2014-03-01 12:12:26.233 EntitiesAndRelationships[64785:a0b] Number of categories is 2
2014-03-01 12:12:26.236 EntitiesAndRelationships[64785:a0b] Number of categories is 2
2014-03-01 12:12:26.237 EntitiesAndRelationships[64785:a0b] Number of categories is 2
2014-03-01 12:12:26.239 EntitiesAndRelationships[64785:a0b] Description of row is <WMDGCategory: 0x8a8a420> (entity: WMDGCategory; id: 0x8a8e2c0 <x-coredata://75EA0FB2-AB3F-480A-9EBE-CDA14EDEB902/WMDGCategory/p2> ; data: <fault>)
2014-03-01 12:12:26.242 EntitiesAndRelationships[64785:a0b] Description of row is <WMDGCategory: 0x8a8c110> (entity: WMDGCategory; id: 0x8a8e2d0 <x-coredata://75EA0FB2-AB3F-480A-9EBE-CDA14EDEB902/WMDGCategory/p1> ; data: <fault>) …Run Code Online (Sandbox Code Playgroud) 我NSTimeInterval从以前的各种计算中得到了几个NSDates.现在我想以days:hours:minutes:seconds格式向用户显示这些间隔.
在我的应用程序的早期,我使用此代码在稍微不同的上下文中显示信息:
-(void)updateDurationLabel
{
//Which calendar
NSCalendar *calendar = [NSCalendar currentCalendar];
//Gets the componentized interval from the most recent time an activity was tapped until now
NSDateComponents *components= [calendar components:NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:self.startTime toDate:[NSDate date] options:0];
NSInteger days = [components day];
NSInteger hours = [components hour];
NSInteger minutes = [components minute];
NSInteger seconds =[components second];
// Converts the components to a string and displays it in the duration label, updated via the timer
cellLabelTempText = [NSString …Run Code Online (Sandbox Code Playgroud) 我有两个视图控制器HomeViewController(以下称HVC)和AddActivityViewController(以下称AAVC).在AAVC中,我宣布了一个委托协议:
@protocol AddActivityViewControllerDelegate;
Run Code Online (Sandbox Code Playgroud)
并由此定义:
@protocol AddActivityViewControllerDelegate
-(void) addActivityViewControllerDidSave;
-(void) addActivityViewControllerDidCancel:(ListActivity *) activityToDelete;
@end
Run Code Online (Sandbox Code Playgroud)
接下来,我在HVC(委托)中实现了这两个方法,如下所示:
-(void) addActivityViewControllerDidSave
{
[self.moc MR_saveToPersistentStoreAndWait];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
-(void) addActivityViewControllerDidCancel:(ListActivity *) activityToDelete
{
[activityToDelete MR_deleteEntity];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误"使用未声明的标识符'addActivityViewControllerDidSave',即使它已在协议中明确声明.
我应该提一下,在此之前,我正在处理显然是"导入循环",导致"未声明的协议"错误.这个错误似乎已得到修复.
以下是HomeViewController.h文件中的@import语句:
#import <UIKit/UIKit.h>
#import "ListActivity.h"
#import "AddActivityViewController.h"
#import "TimedActivity.h"
@interface HomeViewController : UIViewController <AddActivityViewControllerDelegate>
@property (strong, nonatomic) IBOutlet UITableView *myTableView;
@property NSManagedObjectContext * moc;
- (IBAction)dumpMemory:(UIButton *)sender;
@end
Run Code Online (Sandbox Code Playgroud)
并从AddActivityViewController.h文件:
#import <UIKit/UIKit.h>
#import "ListActivity.h"
@protocol AddActivityViewControllerDelegate;
@interface AddActivityViewController : UIViewController
@property …Run Code Online (Sandbox Code Playgroud) 我需要一个标准列表,从中创建谓词以返回根据用户输入进行各种排序的数据.因此,创建一个名为"SearchSpecs"的实体及其相关的子类文件SearchSpecs.h和似乎是合理的SearchSpecs.m.通过这种方式,我的其他类可以使用此类中的方法和属性来创建一个"规范表",从中启动Core Data fetch.
但是,我注意到"单身人士"似乎存在很多争议.我很新,据我所知,从来没有创造过一个单身人士,想知道我现在是不是这样做了?
明白我不想重新开放或煽动单身辩论的火焰,因为我真的不知道它是什么.但我也不想在我的应用程序中创建一些怪物.
有人可以向我保证我的方法安全合理吗?
这是我SearchSpecs.h和SearchSpecs.m文件中的相关代码:
//
// SearchSpecs.h
// WMDGx
//
// Created by Tim Jones on 2/7/14.
// Copyright (c) 2014 TDJ. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface SearchSpecs : NSManagedObject
// Properties
@property (nonatomic, retain) NSDate * fromDate;
@property (nonatomic, retain) NSDate * toDate;
@property (nonatomic, retain) NSString * categoryOfInterest;
@property (nonatomic, retain) NSString * activityOfInterest;
@property (nonatomic, retain) NSString * benchmarkCategory;
@property (nonatomic, retain) …Run Code Online (Sandbox Code Playgroud) 几分钟后我通常可以破译不熟悉的代码,但这是什么:
NSNumber *one = [NSNumber numberWithInt:rand()%60+20];
Run Code Online (Sandbox Code Playgroud)
它来自XYPieChart.
谢谢!
我刚刚从iOS 7.1切换到iOS 8.1.我遇到了以下问题UIView animateWithDuration.图片胜过千言万语,我制作了每个iOS下的行为视频:
iOS 7.1:
iOS 8.1:
这是一款iPhone应用程序.
我应该注意到,在发布之前我已经搜索了SO和其他地方.这似乎是一个公认的问题,但我发现的是一些参考"使用基于约束的动画"(我不明白)并关闭自动布局,但没有真正的共识.
我已经尝试了几次刺伤,但没有任何进展.如果有人能指出(或指导我)一个明确的解决方案,我真的很感激.
我应该提一下,该应用程序只能在纵向位置工作,所以我没有考虑在开发过程中自动布局.
所有涉及的视图都是以编程方式创建的,除了滚动条本身.
这是代码.我包括整个方法,这很长,但我真的不明白新iOS中发生了什么变化,所以我是安全的.这个animateWithDuration电话非常深入到这个块中:
-(void) displayDayChart
{
[self.scroller setBackgroundColor:[UIColor clearColor]];
UIImage *image = [UIImage imageNamed:@"GrayPaper.png"];
self.chartView.backgroundColor = [UIColor colorWithPatternImage:image];
[self.view addSubview:self.scroller];
[self.scroller setScrollEnabled:YES];
[self.scroller setContentSize:CGSizeMake(320, 1800)];
[self.scroller setContentOffset:CGPointMake(0.0, 0.0) animated:YES];
dayBarArray = [[NSMutableArray alloc]init];
infoLabelArray = [[NSMutableArray alloc]init];
timeLabelArray = [[NSMutableArray alloc]init];
timeFrameDC = - 86400; // 24 hours for this test, selectable in real life
[self.scroller.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
timeframeDCStart = [NSDate dateWithTimeIntervalSinceNow:timeFrameDC];
timeframeDCEnd …Run Code Online (Sandbox Code Playgroud) 我在OS X 10.11.3的MBP上运行Xcode 7.3.1.
我开始使用UIStackViews来帮助我布局我的UI.第一个实验很顺利 - 用它制作了一个很棒的自定义数字键盘.所以我转移到一个稍微复杂的场景,一旦我开始嵌套堆栈视图,Xcode就慢慢爬行了.每次命令,它等待5秒,然后在执行它之前使用10个沙滩球.真气.我多次重启Xcode,但没有任何改进.我看到有很多人向Apple报告了这个漏洞.
我看到Xcode 8的测试版是可用的,并且已经阅读了一些注释,但是没有找到与栈视图性能改进直接相关的任何内容.
根据他们在Xcode 8 beta中的堆栈视图性能经验,任何人都可以推荐测试版作为比我当前版本更好的选择吗?
ios ×11
objective-c ×5
core-data ×3
iphone ×2
animation ×1
delegation ×1
ios8.1 ×1
loops ×1
nsstring ×1
plist ×1
popover ×1
protocols ×1
singleton ×1
uicolor ×1
uipickerview ×1
uistackview ×1
uiview ×1
xcode ×1