|
@@ -96,60 +96,60 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
96
|
96
|
|
97
|
97
|
- (instancetype)initWithProps:(NSDictionary *)props children:(NSArray *)children globalProps:(NSDictionary *)globalProps bridge:(RCTBridge *)bridge
|
98
|
98
|
{
|
99
|
|
- NSString *component = props[@"component"];
|
100
|
|
- if (!component) return nil;
|
101
|
|
-
|
102
|
|
- NSDictionary *passProps = props[@"passProps"];
|
103
|
|
- NSDictionary *navigatorStyle = props[@"style"];
|
104
|
|
-
|
105
|
|
- NSMutableDictionary *mergedProps = [NSMutableDictionary dictionaryWithDictionary:globalProps];
|
106
|
|
- [mergedProps addEntriesFromDictionary:passProps];
|
107
|
|
-
|
108
|
|
- RCTRootView *reactView = [[RCTRootView alloc] initWithBridge:bridge moduleName:component initialProperties:mergedProps];
|
109
|
|
- if (!reactView) return nil;
|
110
|
|
-
|
111
|
|
- self = [super init];
|
112
|
|
- if (!self) return nil;
|
113
|
|
-
|
114
|
|
- [self commonInit:reactView navigatorStyle:navigatorStyle props:props];
|
115
|
|
-
|
116
|
|
- return self;
|
|
99
|
+ NSString *component = props[@"component"];
|
|
100
|
+ if (!component) return nil;
|
|
101
|
+
|
|
102
|
+ NSDictionary *passProps = props[@"passProps"];
|
|
103
|
+ NSDictionary *navigatorStyle = props[@"style"];
|
|
104
|
+
|
|
105
|
+ NSMutableDictionary *mergedProps = [NSMutableDictionary dictionaryWithDictionary:globalProps];
|
|
106
|
+ [mergedProps addEntriesFromDictionary:passProps];
|
|
107
|
+
|
|
108
|
+ RCTRootView *reactView = [[RCTRootView alloc] initWithBridge:bridge moduleName:component initialProperties:mergedProps];
|
|
109
|
+ if (!reactView) return nil;
|
|
110
|
+
|
|
111
|
+ self = [super init];
|
|
112
|
+ if (!self) return nil;
|
|
113
|
+
|
|
114
|
+ [self commonInit:reactView navigatorStyle:navigatorStyle props:props];
|
|
115
|
+
|
|
116
|
+ return self;
|
117
|
117
|
}
|
118
|
118
|
|
119
|
119
|
- (instancetype)initWithComponent:(NSString *)component passProps:(NSDictionary *)passProps navigatorStyle:(NSDictionary*)navigatorStyle globalProps:(NSDictionary *)globalProps bridge:(RCTBridge *)bridge
|
120
|
120
|
{
|
121
|
|
- NSMutableDictionary *mergedProps = [NSMutableDictionary dictionaryWithDictionary:globalProps];
|
122
|
|
- [mergedProps addEntriesFromDictionary:passProps];
|
123
|
|
-
|
124
|
|
- RCTRootView *reactView = [[RCTRootView alloc] initWithBridge:bridge moduleName:component initialProperties:mergedProps];
|
125
|
|
- if (!reactView) return nil;
|
126
|
|
-
|
127
|
|
- self = [super init];
|
128
|
|
- if (!self) return nil;
|
129
|
|
-
|
130
|
|
- [self commonInit:reactView navigatorStyle:navigatorStyle props:passProps];
|
131
|
|
-
|
132
|
|
- return self;
|
|
121
|
+ NSMutableDictionary *mergedProps = [NSMutableDictionary dictionaryWithDictionary:globalProps];
|
|
122
|
+ [mergedProps addEntriesFromDictionary:passProps];
|
|
123
|
+
|
|
124
|
+ RCTRootView *reactView = [[RCTRootView alloc] initWithBridge:bridge moduleName:component initialProperties:mergedProps];
|
|
125
|
+ if (!reactView) return nil;
|
|
126
|
+
|
|
127
|
+ self = [super init];
|
|
128
|
+ if (!self) return nil;
|
|
129
|
+
|
|
130
|
+ [self commonInit:reactView navigatorStyle:navigatorStyle props:passProps];
|
|
131
|
+
|
|
132
|
+ return self;
|
133
|
133
|
}
|
134
|
134
|
|
135
|
135
|
- (void)commonInit:(RCTRootView*)reactView navigatorStyle:(NSDictionary*)navigatorStyle props:(NSDictionary*)props
|
136
|
136
|
{
|
137
|
|
- self.view = reactView;
|
138
|
|
-
|
139
|
|
- self.edgesForExtendedLayout = UIRectEdgeNone; // default
|
140
|
|
- self.automaticallyAdjustsScrollViewInsets = NO; // default
|
141
|
|
-
|
142
|
|
- self.navigatorStyle = [NSMutableDictionary dictionaryWithDictionary:navigatorStyle];
|
143
|
|
-
|
144
|
|
- [self setStyleOnInit];
|
145
|
|
-
|
146
|
|
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onRNReload) name:RCTReloadNotification object:nil];
|
147
|
|
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onCancelReactTouches) name:RCCViewControllerCancelReactTouchesNotification object:nil];
|
148
|
|
-
|
149
|
|
- // In order to support 3rd party native ViewControllers, we support passing a class name as a prop mamed `ExternalNativeScreenClass`
|
150
|
|
- // In this case, we create an instance and add it as a child ViewController which preserves the VC lifecycle.
|
151
|
|
- // In case some props are necessary in the native ViewController, the ExternalNativeScreenProps can be used to pass them
|
152
|
|
- [self addExternalVCIfNecessary:props];
|
|
137
|
+ self.view = reactView;
|
|
138
|
+
|
|
139
|
+ self.edgesForExtendedLayout = UIRectEdgeNone; // default
|
|
140
|
+ self.automaticallyAdjustsScrollViewInsets = NO; // default
|
|
141
|
+
|
|
142
|
+ self.navigatorStyle = [NSMutableDictionary dictionaryWithDictionary:navigatorStyle];
|
|
143
|
+
|
|
144
|
+ [self setStyleOnInit];
|
|
145
|
+
|
|
146
|
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onRNReload) name:RCTReloadNotification object:nil];
|
|
147
|
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onCancelReactTouches) name:RCCViewControllerCancelReactTouchesNotification object:nil];
|
|
148
|
+
|
|
149
|
+ // In order to support 3rd party native ViewControllers, we support passing a class name as a prop mamed `ExternalNativeScreenClass`
|
|
150
|
+ // In this case, we create an instance and add it as a child ViewController which preserves the VC lifecycle.
|
|
151
|
+ // In case some props are necessary in the native ViewController, the ExternalNativeScreenProps can be used to pass them
|
|
152
|
+ [self addExternalVCIfNecessary:props];
|
153
|
153
|
}
|
154
|
154
|
|
155
|
155
|
- (void)dealloc
|
|
@@ -166,9 +166,9 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
166
|
166
|
|
167
|
167
|
-(void)onCancelReactTouches
|
168
|
168
|
{
|
169
|
|
- if ([self.view isKindOfClass:[RCTRootView class]]){
|
170
|
|
- [(RCTRootView*)self.view cancelTouches];
|
171
|
|
- }
|
|
169
|
+ if ([self.view isKindOfClass:[RCTRootView class]]){
|
|
170
|
+ [(RCTRootView*)self.view cancelTouches];
|
|
171
|
+ }
|
172
|
172
|
}
|
173
|
173
|
|
174
|
174
|
- (void)viewWillAppear:(BOOL)animated
|
|
@@ -189,7 +189,7 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
189
|
189
|
// we want to reset the style to what we expect (so we need to reset on every willAppear)
|
190
|
190
|
- (void)setStyleOnAppear
|
191
|
191
|
{
|
192
|
|
- [self setStyleOnAppearForViewController:self];
|
|
192
|
+ [self setStyleOnAppearForViewController:self];
|
193
|
193
|
}
|
194
|
194
|
|
195
|
195
|
-(void)setStyleOnAppearForViewController:(UIViewController*)viewController
|
|
@@ -200,7 +200,7 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
200
|
200
|
UIColor *color = screenBackgroundColor != (id)[NSNull null] ? [RCTConvert UIColor:screenBackgroundColor] : nil;
|
201
|
201
|
self.view.backgroundColor = color;
|
202
|
202
|
}
|
203
|
|
-
|
|
203
|
+
|
204
|
204
|
NSString *navBarBackgroundColor = self.navigatorStyle[@"navBarBackgroundColor"];
|
205
|
205
|
if (navBarBackgroundColor)
|
206
|
206
|
{
|
|
@@ -233,19 +233,33 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
233
|
233
|
{
|
234
|
234
|
viewController.navigationController.navigationBar.tintColor = nil;
|
235
|
235
|
}
|
236
|
|
-
|
237
|
|
- NSString *statusBarTextColorScheme = self.navigatorStyle[@"statusBarTextColorScheme"];
|
238
|
|
- if (statusBarTextColorScheme && [statusBarTextColorScheme isEqualToString:@"light"])
|
|
236
|
+
|
|
237
|
+ NSString *statusBarTextColorSchemeSingleScreen = self.navigatorStyle[@"statusBarTextColorSchemeSingleScreen"];
|
|
238
|
+ if (statusBarTextColorSchemeSingleScreen && [statusBarTextColorSchemeSingleScreen isEqualToString:@"light"])
|
239
|
239
|
{
|
240
|
|
- viewController.navigationController.navigationBar.barStyle = UIBarStyleBlack;
|
241
|
|
- self._statusBarTextColorSchemeLight = YES;
|
|
240
|
+ self._statusBarTextColorSchemeLight = YES;
|
242
|
241
|
}
|
243
|
242
|
else
|
244
|
243
|
{
|
245
|
|
- viewController.navigationController.navigationBar.barStyle = UIBarStyleDefault;
|
246
|
|
- self._statusBarTextColorSchemeLight = NO;
|
|
244
|
+ self._statusBarTextColorSchemeLight = NO;
|
247
|
245
|
}
|
248
|
|
-
|
|
246
|
+
|
|
247
|
+ // incase statusBarTextColorSchemeSingleScreen exists ignore the statusBarTextColorScheme which more globaly
|
|
248
|
+ if (!statusBarTextColorSchemeSingleScreen) {
|
|
249
|
+ NSString *statusBarTextColorScheme = self.navigatorStyle[@"statusBarTextColorScheme"];
|
|
250
|
+ if (statusBarTextColorScheme && [statusBarTextColorScheme isEqualToString:@"light"] && !statusBarTextColorSchemeSingleScreen)
|
|
251
|
+ {
|
|
252
|
+ viewController.navigationController.navigationBar.barStyle = UIBarStyleBlack;
|
|
253
|
+ self._statusBarTextColorSchemeLight = YES;
|
|
254
|
+
|
|
255
|
+ }
|
|
256
|
+ else
|
|
257
|
+ {
|
|
258
|
+ viewController.navigationController.navigationBar.barStyle = UIBarStyleDefault;
|
|
259
|
+ self._statusBarTextColorSchemeLight = NO;
|
|
260
|
+ }
|
|
261
|
+ }
|
|
262
|
+
|
249
|
263
|
NSNumber *navBarHidden = self.navigatorStyle[@"navBarHidden"];
|
250
|
264
|
BOOL navBarHiddenBool = navBarHidden ? [navBarHidden boolValue] : NO;
|
251
|
265
|
if (viewController.navigationController.navigationBarHidden != navBarHiddenBool)
|
|
@@ -309,29 +323,44 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
309
|
323
|
|
310
|
324
|
NSNumber *navBarTransparent = self.navigatorStyle[@"navBarTransparent"];
|
311
|
325
|
BOOL navBarTransparentBool = navBarTransparent ? [navBarTransparent boolValue] : NO;
|
312
|
|
- if (navBarTransparentBool)
|
313
|
|
- {
|
314
|
|
- if (![viewController.navigationController.navigationBar viewWithTag:TRANSPARENT_NAVBAR_TAG])
|
|
326
|
+
|
|
327
|
+ void (^action)() = ^ {
|
|
328
|
+ if (navBarTransparentBool)
|
315
|
329
|
{
|
316
|
|
- [self storeOriginalNavBarImages];
|
317
|
|
-
|
318
|
|
- [viewController.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
|
319
|
|
- viewController.navigationController.navigationBar.shadowImage = [UIImage new];
|
320
|
|
- UIView *transparentView = [[UIView alloc] initWithFrame:CGRectZero];
|
321
|
|
- transparentView.tag = TRANSPARENT_NAVBAR_TAG;
|
322
|
|
- [viewController.navigationController.navigationBar insertSubview:transparentView atIndex:0];
|
|
330
|
+ if (![viewController.navigationController.navigationBar viewWithTag:TRANSPARENT_NAVBAR_TAG])
|
|
331
|
+ {
|
|
332
|
+ [self storeOriginalNavBarImages];
|
|
333
|
+
|
|
334
|
+ [viewController.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
|
|
335
|
+ viewController.navigationController.navigationBar.shadowImage = [UIImage new];
|
|
336
|
+ UIView *transparentView = [[UIView alloc] initWithFrame:CGRectZero];
|
|
337
|
+ transparentView.tag = TRANSPARENT_NAVBAR_TAG;
|
|
338
|
+ [viewController.navigationController.navigationBar insertSubview:transparentView atIndex:0];
|
|
339
|
+ }
|
323
|
340
|
}
|
324
|
|
- }
|
325
|
|
- else
|
326
|
|
- {
|
327
|
|
- UIView *transparentView = [viewController.navigationController.navigationBar viewWithTag:TRANSPARENT_NAVBAR_TAG];
|
328
|
|
- if (transparentView)
|
|
341
|
+ else
|
329
|
342
|
{
|
330
|
|
- [transparentView removeFromSuperview];
|
331
|
|
- [viewController.navigationController.navigationBar setBackgroundImage:self.originalNavBarImages[@"bgImage"] forBarMetrics:UIBarMetricsDefault];
|
332
|
|
- viewController.navigationController.navigationBar.shadowImage = self.originalNavBarImages[@"shadowImage"];
|
333
|
|
- self.originalNavBarImages = nil;
|
|
343
|
+ UIView *transparentView = [viewController.navigationController.navigationBar viewWithTag:TRANSPARENT_NAVBAR_TAG];
|
|
344
|
+ if (transparentView)
|
|
345
|
+ {
|
|
346
|
+ [transparentView removeFromSuperview];
|
|
347
|
+ [viewController.navigationController.navigationBar setBackgroundImage:self.originalNavBarImages[@"bgImage"] forBarMetrics:UIBarMetricsDefault];
|
|
348
|
+ viewController.navigationController.navigationBar.shadowImage = self.originalNavBarImages[@"shadowImage"];
|
|
349
|
+ self.originalNavBarImages = nil;
|
|
350
|
+ }
|
334
|
351
|
}
|
|
352
|
+ };
|
|
353
|
+
|
|
354
|
+ if(self.transitionCoordinator.initiallyInteractive || !navBarTransparentBool) {
|
|
355
|
+ action();
|
|
356
|
+ } else {
|
|
357
|
+ UIView* backgroundView = [self.navigationController.navigationBar valueForKey:@"backgroundView"];
|
|
358
|
+ CGFloat originalAlpha = backgroundView.alpha;
|
|
359
|
+ backgroundView.alpha = navBarTransparentBool ? 0.0 : 1.0;
|
|
360
|
+ [self.transitionCoordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
|
|
361
|
+ action();
|
|
362
|
+ backgroundView.alpha = originalAlpha;
|
|
363
|
+ }];
|
335
|
364
|
}
|
336
|
365
|
|
337
|
366
|
NSNumber *navBarTranslucent = self.navigatorStyle[@"navBarTranslucent"];
|
|
@@ -377,18 +406,18 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
377
|
406
|
{
|
378
|
407
|
self.navBarHairlineImageView.hidden = NO;
|
379
|
408
|
}
|
380
|
|
-
|
|
409
|
+
|
381
|
410
|
//Bug fix: in case there is a interactivePopGestureRecognizer, it prevents react-native from getting touch events on the left screen area that the gesture handles
|
382
|
411
|
//overriding the delegate of the gesture prevents this from happening while keeping the gesture intact (another option was to disable it completely by demand)
|
383
|
412
|
self.originalInteractivePopGestureDelegate = nil;
|
384
|
413
|
if (self.navigationController != nil && self.navigationController.interactivePopGestureRecognizer != nil)
|
385
|
414
|
{
|
386
|
|
- id <UIGestureRecognizerDelegate> interactivePopGestureRecognizer = self.navigationController.interactivePopGestureRecognizer.delegate;
|
387
|
|
- if (interactivePopGestureRecognizer != nil)
|
388
|
|
- {
|
389
|
|
- self.originalInteractivePopGestureDelegate = interactivePopGestureRecognizer;
|
390
|
|
- self.navigationController.interactivePopGestureRecognizer.delegate = self;
|
391
|
|
- }
|
|
415
|
+ id <UIGestureRecognizerDelegate> interactivePopGestureRecognizer = self.navigationController.interactivePopGestureRecognizer.delegate;
|
|
416
|
+ if (interactivePopGestureRecognizer != nil)
|
|
417
|
+ {
|
|
418
|
+ self.originalInteractivePopGestureDelegate = interactivePopGestureRecognizer;
|
|
419
|
+ self.navigationController.interactivePopGestureRecognizer.delegate = self;
|
|
420
|
+ }
|
392
|
421
|
}
|
393
|
422
|
}
|
394
|
423
|
|
|
@@ -411,11 +440,11 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
411
|
440
|
-(void)setStyleOnDisappear
|
412
|
441
|
{
|
413
|
442
|
self.navBarHairlineImageView.hidden = NO;
|
414
|
|
-
|
|
443
|
+
|
415
|
444
|
if (self.navigationController != nil && self.navigationController.interactivePopGestureRecognizer != nil && self.originalInteractivePopGestureDelegate != nil)
|
416
|
445
|
{
|
417
|
|
- self.navigationController.interactivePopGestureRecognizer.delegate = self.originalInteractivePopGestureDelegate;
|
418
|
|
- self.originalInteractivePopGestureDelegate = nil;
|
|
446
|
+ self.navigationController.interactivePopGestureRecognizer.delegate = self.originalInteractivePopGestureDelegate;
|
|
447
|
+ self.originalInteractivePopGestureDelegate = nil;
|
419
|
448
|
}
|
420
|
449
|
}
|
421
|
450
|
|
|
@@ -510,57 +539,58 @@ const NSInteger TRANSPARENT_NAVBAR_TAG = 78264803;
|
510
|
539
|
|
511
|
540
|
-(void)addExternalVCIfNecessary:(NSDictionary*)props
|
512
|
541
|
{
|
513
|
|
- NSString *externalScreenClass = props[@"externalNativeScreenClass"];
|
514
|
|
- if (externalScreenClass != nil)
|
515
|
|
- {
|
516
|
|
- Class class = NSClassFromString(externalScreenClass);
|
517
|
|
- if (class != NULL)
|
518
|
|
- {
|
519
|
|
- id obj = [[class alloc] init];
|
520
|
|
- if (obj != nil && [obj isKindOfClass:[UIViewController class]] && [obj conformsToProtocol:@protocol(RCCExternalViewControllerProtocol)])
|
521
|
|
- {
|
522
|
|
- ((id <RCCExternalViewControllerProtocol>)obj).controllerDelegate = self;
|
523
|
|
- [obj setProps:props[@"externalNativeScreenProps"]];
|
524
|
|
-
|
525
|
|
- UIViewController *viewController = (UIViewController*)obj;
|
526
|
|
- [self addChildViewController:viewController];
|
527
|
|
- viewController.view.frame = self.view.bounds;
|
528
|
|
- [self.view addSubview:viewController.view];
|
529
|
|
- [viewController didMoveToParentViewController:self];
|
530
|
|
- }
|
531
|
|
- else
|
532
|
|
- {
|
533
|
|
- NSLog(@"addExternalVCIfNecessary: could not create instance. Make sure that your class is a UIViewController whihc confirms to RCCExternalViewControllerProtocol");
|
534
|
|
- }
|
535
|
|
- }
|
536
|
|
- else
|
|
542
|
+ NSString *externalScreenClass = props[@"externalNativeScreenClass"];
|
|
543
|
+ if (externalScreenClass != nil)
|
537
|
544
|
{
|
538
|
|
- NSLog(@"addExternalVCIfNecessary: could not create class from string. Check that the proper class name wass passed in ExternalNativeScreenClass");
|
|
545
|
+ Class class = NSClassFromString(externalScreenClass);
|
|
546
|
+ if (class != NULL)
|
|
547
|
+ {
|
|
548
|
+ id obj = [[class alloc] init];
|
|
549
|
+ if (obj != nil && [obj isKindOfClass:[UIViewController class]] && [obj conformsToProtocol:@protocol(RCCExternalViewControllerProtocol)])
|
|
550
|
+ {
|
|
551
|
+ ((id <RCCExternalViewControllerProtocol>)obj).controllerDelegate = self;
|
|
552
|
+ [obj setProps:props[@"externalNativeScreenProps"]];
|
|
553
|
+
|
|
554
|
+ UIViewController *viewController = (UIViewController*)obj;
|
|
555
|
+ [self addChildViewController:viewController];
|
|
556
|
+ viewController.view.frame = self.view.bounds;
|
|
557
|
+ [self.view addSubview:viewController.view];
|
|
558
|
+ [viewController didMoveToParentViewController:self];
|
|
559
|
+ }
|
|
560
|
+ else
|
|
561
|
+ {
|
|
562
|
+ NSLog(@"addExternalVCIfNecessary: could not create instance. Make sure that your class is a UIViewController whihc confirms to RCCExternalViewControllerProtocol");
|
|
563
|
+ }
|
|
564
|
+ }
|
|
565
|
+ else
|
|
566
|
+ {
|
|
567
|
+ NSLog(@"addExternalVCIfNecessary: could not create class from string. Check that the proper class name wass passed in ExternalNativeScreenClass");
|
|
568
|
+ }
|
539
|
569
|
}
|
540
|
|
- }
|
541
|
570
|
}
|
542
|
571
|
|
543
|
572
|
#pragma mark - NewRelic
|
544
|
573
|
|
545
|
574
|
- (NSString*) customNewRelicInteractionName
|
546
|
575
|
{
|
547
|
|
- NSString *interactionName = nil;
|
548
|
|
-
|
549
|
|
- if (self.view != nil && [self.view isKindOfClass:[RCTRootView class]])
|
550
|
|
- {
|
551
|
|
- NSString *moduleName = ((RCTRootView*)self.view).moduleName;
|
552
|
|
- if(moduleName != nil)
|
|
576
|
+ NSString *interactionName = nil;
|
|
577
|
+
|
|
578
|
+ if (self.view != nil && [self.view isKindOfClass:[RCTRootView class]])
|
553
|
579
|
{
|
554
|
|
- interactionName = [NSString stringWithFormat:@"RCCViewController: %@", moduleName];
|
|
580
|
+ NSString *moduleName = ((RCTRootView*)self.view).moduleName;
|
|
581
|
+ if(moduleName != nil)
|
|
582
|
+ {
|
|
583
|
+ interactionName = [NSString stringWithFormat:@"RCCViewController: %@", moduleName];
|
|
584
|
+ }
|
555
|
585
|
}
|
556
|
|
- }
|
557
|
|
-
|
558
|
|
- if (interactionName == nil)
|
559
|
|
- {
|
560
|
|
- interactionName = [NSString stringWithFormat:@"RCCViewController with title: %@", self.title];
|
561
|
|
- }
|
562
|
|
-
|
563
|
|
- return interactionName;
|
|
586
|
+
|
|
587
|
+ if (interactionName == nil)
|
|
588
|
+ {
|
|
589
|
+ interactionName = [NSString stringWithFormat:@"RCCViewController with title: %@", self.title];
|
|
590
|
+ }
|
|
591
|
+
|
|
592
|
+ return interactionName;
|
564
|
593
|
}
|
565
|
594
|
|
|
595
|
+
|
566
|
596
|
@end
|