// // IQSegmentedNextPrevious.m // https://github.com/hackiftekhar/IQKeyboardManager // Copyright (c) 2013-15 Iftekhar Qurashi. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #import "IQSegmentedNextPrevious.h" #import "IQKeyboardManagerConstantsInternal.h" #import @interface IQSegmentedNextPrevious () // UISegmentedControl selector for value change. - (void)segmentedControlHandler:(IQSegmentedNextPrevious*)sender; @end @implementation IQSegmentedNextPrevious { id buttonTarget; SEL previousSelector; SEL nextSelector; } // Initialize method -(instancetype)initWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction { // Creating it with two items, Previous/Next. self = [super initWithItems:[NSArray arrayWithObjects:IQLocalizedString(@"Previous", nil),IQLocalizedString(@"Next", nil), nil]]; if (self) { if (IQ_IS_IOS7_OR_GREATER == NO) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" [self setSegmentedControlStyle:UISegmentedControlStyleBar]; #pragma GCC diagnostic pop } [self setMomentary:YES]; [self setTintColor:[UIColor blackColor]]; // Adding self as it's valueChange selector. [self addTarget:self action:@selector(segmentedControlHandler:) forControlEvents:UIControlEventValueChanged]; // Setting target and selectors. buttonTarget = target; previousSelector = previousAction; nextSelector = nextAction; } return self; } // Value has changed - (void)segmentedControlHandler:(IQSegmentedNextPrevious*)sender { // Switching to selected segmenteIndex. switch ([sender selectedSegmentIndex]) { // Previous selected. case 0: { // Invoking selector. NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[buttonTarget class] instanceMethodSignatureForSelector:previousSelector]]; invocation.target = buttonTarget; invocation.selector = previousSelector; [invocation invoke]; } break; // Next selected. case 1: { // Invoking selector. NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[buttonTarget class] instanceMethodSignatureForSelector:nextSelector]]; invocation.target = buttonTarget; invocation.selector = nextSelector; [invocation invoke]; } default: break; } } @end