小编lu *_*uan的帖子

在AppDelegate.m的屏幕上获取当前显示的UIViewController

UIViewController屏幕上的当前需要通过设置徽标视图来响应来自APN的推送通知.但我怎么能得到UIViewControllerin方法application:didReceiveRemoteNotification:AppDelegate.m

我尝试使用self.window.rootViewController获取当前显示UIViewController,它可能是一种UINavigationViewController或其他类型的视图控制器.我发现可以用来获取屏幕上的visibleViewController属性.但如果它不是,我该怎么办?UINavigationViewControllerUIViewControllerUINavigationViewController

任何帮助表示赞赏!相关代码如下.

AppDelegate.m

...
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    //I would like to find out which view controller is on the screen here.

    UIViewController *vc = [(UINavigationViewController *)self.window.rootViewController visibleViewController];
    [vc performSelector:@selector(handleThePushNotification:) withObject:userInfo];
}
...
Run Code Online (Sandbox Code Playgroud)

ViewControllerA.m

- (void)handleThePushNotification:(NSDictionary *)userInfo{

    //set some badge view here

}
Run Code Online (Sandbox Code Playgroud)

iphone uiviewcontroller push-notification ios

119
推荐指数
10
解决办法
17万
查看次数

"自定义样式不支持导航项目"警告与我的自定义栏按钮项

我将Round Rect按钮拖动到右侧Bar Button项的位置,并将图像设置为Round Rect Button.除警告"导航项目中不支持普通样式"外,一切正常.即使我选择条形按钮项的样式为"有边框",警告仍然存在.Xcode 4.2有什么问题?提前致谢!

PS.我使用圆形矩形按钮定制了许多条形按钮项目,有时Xcode 4.2仅显示条形按钮项目上的一个警告,有时显示所有条形按钮项目的警告.

iphone xcode uibarbuttonitem uibarbuttonitemstyle ios

83
推荐指数
5
解决办法
4万
查看次数

动态获取键盘的框架

是否可以动态获取键盘的框架,实际上是它的高度?因为我有一个UITextView并且我想根据键盘框架高度调整其高度,当键盘的输入方法改变时.如您所知,不同的输入方法可能具有不同的键盘框架高度.

iphone keyboard uitextview ios

33
推荐指数
2
解决办法
4万
查看次数

在iOS 7中模式化具有翻转水平转换的视图控制器时,导航栏的位置错误

当我尝试在iOS7中模拟具有翻转水平过渡的视图控制器时,导航栏的原点在开始时为(0,0),然后在(0,20)处跳转到右侧位置.是否有可能使其在iOS6中表现相同?您可以在此处下载该项目.

我创建了一个自定义导航栏,如下所示:

@implementation MyCustomNavigationBar

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    UIImage *image = [UIImage imageNamed:@"Custom-Nav-Bar-BG.png"];


    [image drawInRect:CGRectMake(0,  0, self.frame.size.width, self.frame.size.height)];

    if (IOSVersion <7) {
    }else{
        self.translucent = NO;
        self.tintColor = [UIColor whiteColor];
        self.barStyle = UIBarStyleDefault;
        self.barTintColor = [UIColor redColor];

    }
}

@end
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

cocoa-touch uinavigationbar ios7

24
推荐指数
1
解决办法
5266
查看次数

使用NSPredicate过滤包含字典的数组

有一个数组,每个元素都是一个NSDictionary.

NSMutableArray *mutArr = [NSMutableArray array];

for (Person *person in persons) {
    NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:person.name, @"name", person.email, @"email", nil];
    [mutArr addObject:dict];
}

self.arr = [[NSArray alloc] initWithArray:mutArr];
Run Code Online (Sandbox Code Playgroud)

如何通过使用方法使用arr名称或电子邮件文件管理包含字符串.@"filter string"filterArrayUsingPredicate:

提前致谢!

iphone nsarray nspredicate ios

22
推荐指数
1
解决办法
2万
查看次数

通用视图控制器基类

我想为我的项目创建一个BaseViewController类(继承自UIViewController),它可以作为我项目中其他视图控制器的基类.这是为了添加诸如常见进度HUD,刷新按钮和网络更新机制之类的东西,也许是可以通过每个子类自定义文本的错误对话框等.

至关重要的是,我希望能够将这个功能添加到UIViewController子类和UITableViewController子类中,但是我无法将自己插入到UITableViewController类层次结构中,因此我需要a BaseUIViewController和a BaseUITableViewController,但如果我这样做,我必须实现两次更改并保持同步.

对于必须可以访问BaseViewController子类和BaseTableViewController子类的公共代码,单个位置的最佳方法是什么?我只想在我的代码中有一个地方,我将不得不处理常见的任务.

1)我曾考虑使用带关联引用的类别,但问题是我需要自定义ViewController生命周期类的实现,例如viewDidLoad:,这不是一个好主意.

2)我可以UITableViewController完全跳过,并BaseTableViewController从BaseViewController 构建我自己的,自己实现tableView delegate&datasource方法,但我不太喜欢在这里跳过apple的控制器实现.

3)我可以BaseViewController继承UIViewController,BaseTableViewController继承UITableViewController,并将自定义方法调用放入ViewControllerBaseMethods可以从两个"Base"文件调用的第三个文件中.可能仍然存在重复的属性,但至少方法代码将在一个地方.

对于这种类型的东西还有其他任何好方法吗?

objective-c uiviewcontroller ios

21
推荐指数
2
解决办法
4747
查看次数

在地图视图上拖动注释引脚

注释引脚是可拖动的,但我无法将其放到目标位置.问题是如何获取目标位置的坐标,我放下注释引脚?有任何方法吗?

编辑1:

注释引脚的中心似乎永远不会改变我放下引脚的地方.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState 
fromOldState:(MKAnnotationViewDragState)oldState 
{
if (newState == MKAnnotationViewDragStateEnding)
{
    NSLog(@"x is %f", annotationView.center.x);
    NSLog(@"y is %f", annotationView.center.y);

    CGPoint dropPoint = CGPointMake(annotationView.center.x, annotationView.center.y);
    CLLocationCoordinate2D newCoordinate = [self.mapView convertPoint:dropPoint toCoordinateFromView:annotationView.superview];
    [annotationView.annotation setCoordinate:newCoordinate];

}
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

Annotation.h

@property (nonatomic,readwrite,assign) CLLocationCoordinate2D coordinate;
Run Code Online (Sandbox Code Playgroud)

Annotation.m

- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate {
coordinate = newCoordinate; 
}
Run Code Online (Sandbox Code Playgroud)

编辑3: 我在哪里拖动引脚,掉落的NSLog输出总是相同的.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState 
fromOldState:(MKAnnotationViewDragState)oldState 
{
if (newState == MKAnnotationViewDragStateEnding)
{
    CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
    NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
}
} …
Run Code Online (Sandbox Code Playgroud)

iphone draggable mkannotation ios

13
推荐指数
1
解决办法
2万
查看次数

用于定义块的块的语法,该块采用块并在Objective-C中返回块

我在Apple的文档"使用块"中找到了定义的语法,该块返回乘以两个值的结果:

double (^multiplyTwoValues)(double, double);
Run Code Online (Sandbox Code Playgroud)

不同于定义一个块,该块将另一个块作为参数并返回另一个块:

void (^(^complexBlock)(void (^)(void)))(void);
Run Code Online (Sandbox Code Playgroud)

为什么第二种语法不是void (^)(void)(^complexBlock)(void (^)(void))

syntax declaration objective-c objective-c-blocks

10
推荐指数
1
解决办法
809
查看次数

撤消子视图控制器中所做的所有更改

有两个实体:作者和书.作者有一个属性authorName和一个to-many关系书.本书有几个属性和一个关系作者.有一个视图控制器(VCAuthor)来编辑Author对象.子视图控制器(VCBook)用于编辑作者的书籍.只有一个managedobjectcontext.在VCBook类中,我将undomanager分组如下

-(void)viewDidLoad
{    
    NSUndoManager *anUndoManager = [[NSUndoManager  alloc] init];
    [self.book.managedObjectContext setUndoManager:anUndoManager];
    [anUndoManager release];
    [self.book.managedObjectContext.undoManager beginUndoGrouping];
}

-(void)cancelAction:(id)sender
{
    NSLog(@"%@", self.author.authorName);
    [self.book.managedObjectContext.undoManager endUndoGrouping];
    [self.book.managedObjectContext.undoManager undoNestedGroup];
    self.book.managedObjectContext.undoManager = nil;
    NSLog(@"%@", self.author.authorName);    
    [self dismissModalViewControllerAnimated:YES];  
}
Run Code Online (Sandbox Code Playgroud)

cancelAction链接到VCBook上的取消按钮,用于撤消VCBook中所做的所有更改.

问题在于:首先,在VCAuthor中,我在UITextfiled authorNameTextField中编辑从奥巴马到大奥巴马的authorName,并通过author.authorName = authorNameTextField.text将其保存到MOC中 - (void)viewWillDisappear:(BOOL)animated {} 方法.然后我进入子视图控制器VCBook编辑作者的书籍,然后单击取消按钮返回到VCAuthor.我发现authorName仍然是奥巴马,这意味着authorName的预期更改已被撤消.authorName的更改根本不在撤消组中,为什么会发生这种情况?PS.当我回到VCAuthor时,我重新加载数据.我只是NSLog在撤消之前和之后的authorName.撤消之前,authorName是改变后的大奥巴马,并在撤消之后成为奥巴马

iphone core-data nsundomanager nsmanagedobjectcontext ios

9
推荐指数
1
解决办法
1306
查看次数

用户访问通讯簿时发生崩溃报告

在我的应用程序中,Crashlytics用于收集用户的崩溃报告.这是来自用户的一个崩溃报告.它可能取决于用户的联系信息.我无法重建崩溃,因为我不知道他/她的联系人是什么.有没有人对这种情况有所了解?

com.apple.root.default-priority Crashed
0    CoreFoundation  CFStringCreateCopy + 13
1    AppSupport  CPSqliteDatabaseCreateWithPath + 36
2    AppSupport  CPSqliteDatabaseCreateWithPath + 36
3    AppSupport  CPRecordStoreGetDatabase + 16
4    AppSupport  _getReaderConnection + 10
5    AppSupport  CPRecordStoreProcessQueryWithBindBlock + 22
6    AppSupport  CPRecordStoreCopyAllInstancesOfClassWhereWithBindBlock + 98
7    AddressBook     ABCCopyArrayOfAllPeopleInSourceWithSortOrdering + 244
8    SeeYouKee  PhoneNumberInputViewController.m line 538-[PhoneNumberInputViewController dofetchContacts:]
9    AddressBook     __37-[ABTCC accessRequestWithCompletion:]_block_invoke_0 + 26
10   TCC     __TCCAccessRequest_block_invoke_038 + 316
11 ...   libxpc.dylib    _xpc_connection_call_reply + 26
12   libdispatch.dylib   _dispatch_root_queue_drain + 278
13   libdispatch.dylib   _dispatch_worker_thread2 + 92
14   libsystem_c.dylib   _pthread_wqthread + …
Run Code Online (Sandbox Code Playgroud)

crash-reports abaddressbook ios

8
推荐指数
2
解决办法
2234
查看次数