开发者

iPhone UISwitch Problem

开发者 https://www.devze.com 2023-03-18 07:04 出处:网络
My switch will not reset when I call clearbtn, it just remains in the same state. Also when I call pushme and check to see if the switch is on or off it always detects its off, what would be causing t

My switch will not reset when I call clearbtn, it just remains in the same state. Also when I call pushme and check to see if the switch is on or off it always detects its off, what would be causing this? How can I fix this? I created a Window-based application just to play around, I didnt create a UIViewController yet, is that what is causing this issue? Thank You.

My .h file

    UIButton *_pushmebutton;
    UITextField *_nametextfield;
    UILabel *_pushmelabel;
    UIImageView *_bgimage;
    UISwitch *_bgswitch;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIButton *pushmebutton;
@property (nonatomic, retain) IBOutlet UITextField *nametextfield;
@property (nonatomic, retain) IBOutlet UILabel *pushmelabel;
@property (nonatomic, retain) IBOutlet UISwitch *bgswitch;
@property (nonatomic, retain) IBOutlet UIImageView *bgimage;
- (IBAction)textFieldReturn:(id)sender;
- (IBAction)backgroundTouched:(id)sender;
- (IBAction)pushme:(id)sender;
- (IBAction)clearbtn:(id)sender;
- (IBAction)changebg:(id)sender;

My .m File

#import "MyFirstAppAppDelegate.h"

@implementation MyFirstAppAppDelegate


@synthesize window=_window;
@synthesize pushmebutton = _pushmebutton;
@synthesize nametextfield = _nametextfield;
@synthesize pushmelabel = _pushmelabel;
@synthesize bgswitch = _bgswitch;
@synthesize bgimage = _bgimage;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    /*
     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
     */
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    /*
     Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
     */
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    /*
     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
     */
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
}

- (void)dealloc
{
    [_window release];
    [_pushmebutton release];
    [_pushmelabel release];
    [_nametextfield release];
    [super dealloc];
}


-(IBAction)pushme:(id)sender 
{
    if([_nametextfield.text length] == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please Enter Your Name" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; [alert release];
    }
    else
    {
    [_nametextfield resignFirstResponder];
        if(_bgimage.hidden == false)
        {
            self.pushmelabel.backgroundColor = [UIColor redColor];
        }
        if(_bgswitch.on)
   开发者_运维技巧     {
            NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@ Thanks for using the App! Switch: On!", _nametextfield.text];
            self.pushmelabel.text = msg;
        }
        else
        {
        NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@ Thanks for using the App! Switch: Off!", _nametextfield.text];
        self.pushmelabel.text = msg;
        }
    }
}
-(IBAction)clearbtn:(id)sender;
{
    _nametextfield.text = @"";
    _pushmelabel.text = @"";
    _pushmelabel.backgroundColor = [UIColor clearColor];
    [_bgswitch setOn:NO animated:YES];
}
-(IBAction)textFieldReturn:(id)sender
{
    [sender resignFirstResponder];
}
-(IBAction)backgroundTouched:(id)sender
{
    [_nametextfield resignFirstResponder];
}
-(IBAction)changebg:(id)sender
{
    if(_bgimage.hidden == false)
    {
    _bgimage.hidden = true;
        _pushmelabel.backgroundColor = [UIColor clearColor];
    }
    else if(_bgimage.hidden == true)
    {
        _bgimage.hidden = false;
        if([_pushmelabel.text length] > 0)
        {
        _pushmelabel.backgroundColor = [UIColor redColor];
        }
    }
}

@end


My hunch is telling me that you haven't connected the outlet to the switch in IB. Check for that connection and make it if necessary. If the connection is already there, NSLog your switch in the pushme method and see if it comes out to nil.


You really shouldn't use ApplicationDelegate like this - it's intended to be the delegate for application events, and that is all it should be. Since it doesn't inherit from UIViewController, it wont participate in normal view lifecycle stuff, so it's very likely that is your problem. Put your view stuff in a UIViewController, and try your switch again.

0

精彩评论

暂无评论...
验证码 换一张
取 消