There is no private or protected methods concept in Objective-C. I think it is related to the architecture of invoking method in Objective-C. Each method is invoked like [self method] style or [self performSelector:@selector(method)]. Internally, Objective-C runtime resolves method implementation by searching method name. This architecture gives flexibility to call method and also allows to have “category” but it is hard to support private method.
How to remember the setting (user defaults) easily
NSUserDefautls object automatically loads and saves small information. Along with primitive value like BOOL, integer or float, NSUserDefaults can handle objects like NSArray, NSData, NSDictionary, NSString.
// Save a default
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"ShowWarning"];
// Read BOOL warning value from NSUserDefaults
BOOL showWarning = [[NSUserDefaults standardUserDefaults] boolForKey:@"ShowWarning"];
Capture view contents into an UIImage object
By combining UIGraphicsBeginImageContext() and -renderInContext in CALayer, you can draw contents into a image (UIImage) object. It is like screen capture.
UIGraphicsBeginImageContext(view.frame.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Set border around the view
There is no border property in UIView…. classes but we can access CALayer class to set border. Since layer property is defined in the UIView class, all of UIView inherited class can use this property to set border. It needs to have #import <QuartzCore/QuartzCore.h> to access CALayer.
view.layer.borderWidth = 1;
view.layer.borderColor = [[UIColor grayColor] CGColor];
Calling selectors with multiple arguments – Stack Overflow
In Objective-C, a selector’s signature consists of:
- The name of the method (in this case it would be ‘myTest’) (required)
- A ‘;’ (colon) following the method name if the method has an input.
- A name and ‘:’ for every additional input.
Accessing AppDelegate instance
AppDelegate object can access from any class in the same application like below. Methods or properties shared between controllers can be defined under application delegates.
SomeAppDelegate *appDelegate
= (SomeAppDelegate *)[[UIApplication sharedApplication] delegate];
How to access special directory on the iphone device
Use NSSearchPathForDirectoriesInDomains(). First argument “NSDocumentDirecotry” is the key to specify special directory, in this case Document directory under the application. The method returns absolute path expression.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"NSDocumentDirectory is %@", documentsDirectory);
Repeating background image in native iPhone app – Stack Overflow
Apparently a UIColor is not necessarily a single color, but can be a pattern as well. Confusingly, this is not supported in Interface Builder.
Instead you set the backgroundColor of the view (say, in -viewDidLoad) with the convenience method +colorWithPatternImage: and pass it a UI Image. For Instance:
Applying animation while resizing or moving the view
Animation can be applied while its frame, bounds, center, transform, alpha… is being changed. The key is set start and end values between beginAnimations and commitAnimations, so called animation block.
Create alert dialog
UIAlertView takes care of this
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Alert View"
message:@"Here is an alert message"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
[alert show];
// Since alert object is allocated above, it must be released here
[alert release];