通过引用传递 UIViewController 或在另一个处理程序类中获得自我控制
Posted
技术标签:
【中文标题】通过引用传递 UIViewController 或在另一个处理程序类中获得自我控制【英文标题】:Passing UIViewController by reference or get self control in another handler class 【发布时间】:2014-09-19 14:04:22 【问题描述】:我创建了一个单独的类 MyUtil 用于处理一些基本操作,如导航左右按钮及其事件。 LeftButton(UIBarButton left) 已处理但 right 显示但未处理。
请建议我换一种方式。
MyUtil.h
#import <Foundation/Foundation.h>
@interface
@interface MyUtil : NSObject
@property(strong,nonatomic) UIViewController *uiv;
-(void)NavAndBackBtn:(UIViewController *)context;// it is running awesome.
-(void)NavAndForwardBtn:(UIViewController *)context :(NSString *)vc_name;//it displays right button but don't know how to add pushViewController to it in this class.
//context is self of calling ViewController and vc_name is the name of ViewController which i want to push
@end
MyUtil.m
#import "MyUtil.h"
#import "ForgotPassViewController.h"
@implementation MyUtil
-(void)pushingView:(UIViewController *)vvc secondInput:(NSString *)view_name
Class theClass = NSClassFromString(view_name);
id myObject = [[theClass alloc] init];
[vvc.navigationController pushViewController:myObject animated:YES];
-(void)method:(NSArray *)val
-(void)NavAndBackBtn:(UIViewController *)context
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"icon_back2.png"] forState:UIControlStateNormal];
[button addTarget:context.navigationController action:@selector(popViewControllerAnimated:)forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 36, 20)];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
context.navigationItem.leftBarButtonItem =barButton;
-(void)myMethode:(NSArray*)params
UIViewController *vvc = [params objectAtIndex:0];
NSString *strArg = [params objectAtIndex:1];
Class theClass = NSClassFromString(strArg);
id myObject = [[theClass alloc] init];
[vvc.navigationController pushViewController:myObject animated:YES];
-(void)NavAndForwardBtn:(UIViewController *)context :(NSString *)vc_name
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"Skip" forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setFrame:CGRectMake(0, 0, 36, 20)];
//[button setImage:[UIImage imageNamed:@"icon_back2.png"] forState:UIControlStateNormal];
// NSArray *params = [NSArray arrayWithObjects:context,vc_name,nil];
[button addTarget:self.leftDelegate action:@selector(context)forControlEvents:UIControlEventTouchUpInside];
// [button addTarget:self action:@selector(myMethode:) forControlEvents:UIControlEventTouchUpInside];
// [button add]
//[button performSelector:@selector(myMethode:) withObject:params afterDelay:15.0];
/// doctory...
// NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
// [context methodSignatureForSelector:@selector(changeImage:)]];
//
// [invocation setTarget:context];
//
// [invocation setSelector:@selector(changeImage:)];
//
// [invocation setArgument:(__bridge void *)(context) atIndex:2];
//
// [invocation setArgument:(__bridge void *)(vc_name) atIndex:3];
//
// [NSTimer scheduledTimerWithTimeInterval:0.1f invocation:invocation repeats:NO];
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
context.navigationItem.rightBarButtonItem =barButton;
-(void) pushNewVC: (UIViewController *) vvc : (NSString *) str
NSString *strArg = str; //[NSString stringWithFormat:string];
Class theClass = NSClassFromString(strArg);
id myObject = [[theClass alloc] init];
[vvc.navigationController pushViewController:myObject animated:YES];
@结束
我已经尝试了两天,但没有找到通过引用让自己进入另一个班级的方法。有人说不可能通过引用传递,但它可以做任何你想做的事情。我将自己发送到 MyUtil.m 类,它显示左右 UINavigationItem.leftButton 和 RightButton。
MyUtil 中的左按钮
[leftbutton addTarget:context.navigationController action:@selector(popViewControllerAnimated:)forControlEvents:UIControlEventTouchUpInside]; //it is doing absolutely what i wanted..
现在让右键打开(Push ViewController)我做了
[右键addTarget:context.navigationController action:@selector(pushViewController:animated:)forControlEvents:UIControlEventTouchUpInside];
// 我如何传递一个 UIViewController 来打开。上面的函数如何知道要打开什么
我尝试了多种方法来解决这个问题 第一种在选择器中传递多个参数的方法; myMethode:(NSArray *)params
问题 1
是否可以将 self 作为 &self 发送。并在另一个班级中获得它。我在 MyUtil.h 中尝试过。我也使用**双指针,但它没有通过。
问题 2 在我的情况下是否可以使用多个参数,它们是 UIViewController 和 NSString 或两者都是 UIViewController
问题 3
有没有办法将 UIViewController 发送或附加到给定的语句
问题 4
我创建了一个@property(strong,nonatomic)UIViewController *vc;
当我将 self of calling ViewController
分配给 vc 时。它没有按我的预期工作。有没有办法让另一个 ViewController 的 self 被处理并捕获到该类的属性中。
[button addTarget:context.navigationController action:@selector(pushViewController:animated:) forControlEvents:UIControlEventTouchUpInside];
//我如何告诉这个函数推送哪个 ViewController,因为我有两个 UIViewController 在函数中。
注意
我正在使用另一个名为 MyUtil 的类。主要问题是我无法从 MyUtils 中的函数中调用 [self.navigationController pushViewController:anyVC]
。
【问题讨论】:
【参考方案1】:也许我错了,但是你为什么不在 UIViewController 上创建一个 Category 来处理你想做的事情呢?您的 MyUtil 所做的对我来说听起来像是一个类别,在这种情况下,您可以访问自己的 UIViewController。
【讨论】:
以上是关于通过引用传递 UIViewController 或在另一个处理程序类中获得自我控制的主要内容,如果未能解决你的问题,请参考以下文章