ios6 interview questions
Top ios6 frequently asked interview questions
As the ShouldAutorotateToInterfaceOrientation
is deprecated in iOS 6 and I used that to force a particular view to portrait only, what is the correct way to do this in iOS 6? This is only for one area of my app, all other views can rotate.
Thank you.
Source: (StackOverflow)
I upgraded Xcode version and when using external static libraries, I get this message:
ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /file/location for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Is there any way to bypass this and add support to the library if the developer of the library hasn't updated their library yet?
Source: (StackOverflow)
I'm updating an old app with an AdBannerView
and when there is no ad, it slides off screen. When there is an ad it slides on screen. Basic stuff.
Old style, I set the frame in an animation block.
New style, I have a IBOutlet
to the constraint which determines the Y position, in this case it's distance from the bottom of the superview, and modify the constant.
- (void)moveBannerOffScreen {
[UIView animateWithDuration:5
animations:^{
_addBannerDistanceFromBottomConstraint.constant = -32;
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
[UIView animateWithDuration:5
animations:^{
_addBannerDistanceFromBottomConstraint.constant = 0;
}];
bannerIsVisible = TRUE;
}
And the banner moves, exactly as expected, but no animation.
UPDATE: I re-watched WWDC12 video "Best Practices for Mastering Auto Layout" which covers animation. It discusses how to update constraints using CoreAnimation
.
I've tried with the following code, but get the exact same results.
- (void)moveBannerOffScreen {
_addBannerDistanceFromBottomConstraint.constant = -32;
[UIView animateWithDuration:2
animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
_addBannerDistanceFromBottomConstraint.constant = 0;
[UIView animateWithDuration:2
animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = TRUE;
}
On a side note, I have checked numerous times and this is being executed on the main thread.
Source: (StackOverflow)
What properties can I set via an UIAppearance proxy? Apple's UIKit documentation does not list them. Is there a list of these properties?
Source: (StackOverflow)
I'm trying to work out how to set the UITableViewCellStyle
when using the new methods in iOS 6 for UITableView
.
Previously, when creating a UITableViewCell
I would change the UITableViewCellStyle
enum to create different types of default cells when calling initWithStyle:
but from what I can gather, this is no longer the case.
The Apple documentation for UITableView
states:
Return Value:
A UITableViewCell object with the associated reuse identifier. This method always returns a valid cell.
Discussion:
For performance reasons, a table view's data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one based on the class or nib file you previously registered.
Important: You must register a class or nib file using the registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier: method before calling this method.
If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.
This is how my new cellForRowAtIndexPath
looks after implementing the new methods:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell_identifier";
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
return cell;
}
The code I have so far works fine but always returns the default style. How can I change this so I can create cells with the other styles such as UITableViewCellStyleDefault
, UITableViewCellStyleValue1
, UITableViewCellStyleValue2
and UITableViewCellStyleSubtitle
?
I don't want to subclass UITableViewCell
, I just want to change the default type as I could do prior to iOS 6. It seems odd that Apple would provide enhanced methods but with minimal documentation to support their implementation.
Has anyone mastered this, or run in to a similar problem? I'm struggling to find any reasonable information at all.
Source: (StackOverflow)
I want to to customize UITableView
header for each section. So far, i've implemented
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
this UITabelViewDelegate
method. What i do want to do is get current header for each section and just add UILabel
as a subview.
So far, i'm not able to accomplish that. Because, i couldn't find anything to get default section header. First question,is there any way to get default section header ?
If it's not possible, i need to create a container view which is a UIView
but,this time i need to set default background color,shadow color etc. Because, if you look carefully into section's header, it's already customized.
How can i get these default values for each section header ?
Thank you all.
Source: (StackOverflow)
I've just upgraded to XCode 4.5 to update my iOS app to run on the 4 inch display for the iPhone 5, but I'm getting a build error saying dismissModalViewControllerAnimated:' is deprecated
on the line:
[self dismissModalViewControllerAnimated:NO];
I've tried updating to the recommended overload with a completion handler (but set to NULL) like this:
[self dismissModalViewControllerAnimated:NO completion:NULL];
But then this line throws two errors:
warning: 'TabBarController' may not respond to '-presentModalViewController:animated:completion:'
Instance method '-presentModalViewController:animated:completion:' not found (return type defaults to 'id')
Thanks!
Source: (StackOverflow)
I have an iPhone app that uses a UINavigationController
to present a drill-down interface: First one view, then another, up to four levels deep. I want the first three views restricted to portrait orientation and only the last view should be allowed to rotate to landscape. When returning from the fourth view to the third and the fourth view was in landscape orientation I want everything to rotate back to portrait.
In iOS 5 I simply defined shouldAutorotateToInterfaceOrientation:
in each of my view controllers to return YES for the allowable orientations. Everything worked as described above, including the return to portrait even if the device was being held in landscape orientation when returning from view controller #4 to #3.
In iOS 6 all view controllers rotate to landscape, breaking those that weren't meant to. The iOS 6 release notes say
More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController
) do not consult their children to determine whether they should autorotate. [...] The system asks the top-most full-screen view controller (typically the root view controller) for its supported interface orientations whenever the device rotates or whenever a view controller is presented with the full-screen modal presentation style. Moreover, the supported orientations are retrieved only if this view controller returns YES from its shouldAutorotate
method. [...] The system determines whether an orientation is supported by intersecting the value returned by the app’s supportedInterfaceOrientationsForWindow:
method with the value returned by the supportedInterfaceOrientations
method of the top-most full-screen controller.
So I subclassed UINavigationController
, gave my MainNavigationController
a boolean property landscapeOK
and used this to return the allowable orientations in supportedInterfaceOrientations
. Then in each of my view controllers' viewWillAppear:
methods I have a line like this
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
to tell my MainNavigationController
the desired behavior.
Here comes the question: If I now navigate to my fourth view in portrait mode and turn the phone over it rotates to landscape. Now I press the back button to return to my third view which is supposed to work portrait only. But it doesn't rotate back. How do I make it do that?
I tried
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
in the viewWillAppear
method of my third view controller, but it doesn't do anything. Is this the wrong method to call or maybe the wrong place to call it or should I be implementing the whole thing in a totally different way?
Source: (StackOverflow)
I have a UICollectionView
which shows photos. I have created the collectionview using UICollectionViewFlowLayout
. It works good but I would like to have spacing on margins. Is it possible to do that using UICollectionViewFlowLayout
or must I implement my own UICollectionViewLayout
?
Source: (StackOverflow)
Right-clicking the Exit icon yields an empty window. Can't Ctrl-drag a connection to any IB elements or corresponding source files. Docs give no love. Doesn't appear in nib files, only storyboards. My assumption is that it's a corollary to segues, but I don't see any new methods to back it up. Anyone?
Source: (StackOverflow)
When a user makes some changes (cropping, red-eye removal, ...) to photos in the built-in Photos.app on iOS, the changes are not applied to the fullResolutionImage
returned by the corresponding ALAssetRepresentation
.
However, the changes are applied to the thumbnail
and the fullScreenImage
returned by the ALAssetRepresentation
.
Furthermore, information about the applied changes can be found in the ALAssetRepresentation
's metadata dictionary via the key @"AdjustmentXMP"
.
I would like to apply these changes to the fullResolutionImage
myself to preserve consistency. I've found out that on iOS6+ CIFilter
's filterArrayFromSerializedXMP: inputImageExtent:error:
can convert this XMP-metadata to an array of CIFilter
's:
ALAssetRepresentation *rep;
NSString *xmpString = rep.metadata[@"AdjustmentXMP"];
NSData *xmpData = [xmpString dataUsingEncoding:NSUTF8StringEncoding];
CIImage *image = [CIImage imageWithCGImage:rep.fullResolutionImage];
NSError *error = nil;
NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData
inputImageExtent:image.extent
error:&error];
if (error) {
NSLog(@"Error during CIFilter creation: %@", [error localizedDescription]);
}
CIContext *context = [CIContext contextWithOptions:nil];
for (CIFilter *filter in filterArray) {
[filter setValue:image forKey:kCIInputImageKey];
image = [filter outputImage];
}
However, this works only for some filters (cropping, auto-enhance) but not for others like red-eye removal. In these cases, the CIFilter
s have no visible effect. Therefore, my questions:
- Is anyone aware of a way to create red-eye removal
CIFilter
? (In a way consistent with the Photos.app. The filter with the key kCIImageAutoAdjustRedEye
is not enough. E.g., it does not take parameters for the position of the eyes.)
- Is there a possibility to generate and apply these filters under iOS 5?
Source: (StackOverflow)
This question already has an answer here:
Could not insert new outlet connection: Could not find any information for the class and not showing any class named "ViewController"
Solutions I have done :
- Restarted XCode
- Restarted System
- Deleted the Deriveddata contents from /Library/developer/xcode
But nothing worked for me
Here is the screenshot for the error
Source: (StackOverflow)
in iOS6 I noticed the new Container View but am not quite sure how to access it's controller from the containing view.
Scenario:
I want to access the labels in Alert view controller from the view controller that houses the container view.
There's a segue between them, can I use that?
Source: (StackOverflow)
How am I supposed to configure programmatically (and in which method) a UILabel whose height depends on its text? I've been trying to set it up using a combination of Storyboard and code, but to no avail. Everyone recommends sizeToFit
while setting lineBreakMode
and numberOfLines
. However, no matter if I put that code in viewDidLoad:
, viewDidAppear:
, or viewDidLayoutSubviews
I can't get it to work. Either I make the box too small for long text and it doesn't grow, or I make it too big and it doesn't shrink.
Source: (StackOverflow)