236
C
HAPTER
13 
Creating basic view controllers
Using all of these properties, you can make each table cell look entirely unique, 
depending on the needs of your program.
ADDING ACCESSORY VIEWS
Though we didn’t in our color selector example, you can optionally set accessories on 
cells. Accessories are special elements that appear to the right of each list item. Most 
frequently, you’ll set accessories using an 
accessoryType
constant that has four possi-
ble values, as shown in table 13.8.
An accessory can be set as a property of a cell:
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
The normal chevron is usually used with a navigation controller, the blue chevron is 
typically used for configuration, and the checkmark indicates selection.
There is also an 
accessoryView
property, which lets you undertake the more com-
plex task of creating an entirely new view to the right of each list item. You create a 
view and then set the 
accessoryView
to that view:
cell.accessoryView = [[myView alloc] init];
There’s an example of this in chapter 16, where you’ll be working with preference tables.
ADDING SECTIONS
Our example showed how to display a single section worth of cells, but it would be 
trivial to rewrite the functions to each offer different outputs for different sections 
text
Sets the content of a cell to an NSString
textAlignment
Sets the alignment of cell’s text using the 
UITextAlignment constant
textColor
Sets the color of the cell’s text using UIColor
selectedTextColor
Sets the color of selected text using UIColor
Image
Sets the content of a cell to a UIImage
selectedImage
Sets the content of a selected cell to UIImage
Table 13.8 A cell accessory gives additional information.
Constant
Summary
UITableViewCellAccessoryNone
No accessory
UITableViewCellAccessoryDisclosureIndicator
A normal chevron: 
UITableViewCellAccessoryDetailDisclosureButton
A chevron in a blue button: 
UITableViewCellAccessoryCheckmark
A checkmark: 
Table 13.7 You can modify your table cells in a variety of ways. (continued)
Property
Summary
Licensed to Nick Wood <nwood888@yahoo.com>
Convert pdf image to jpg image - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf file to jpg on; change pdf to jpg
Convert pdf image to jpg image - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
best program to convert pdf to jpg; .pdf to jpg
237
The table view controller
within the table. Because of Objective-C’s ease of accessing nested objects, you could 
prepare for this by nesting an array for each section inside a larger array:
masterColorList = [NSArray arrayWithObjects:colorList,otherColorList,nil];
Then you’d return the count from this uber-array for the 
numberOfSections:
method:
return masterColorList.count;
You’d similarly return a subcount of one of the subarrays for the 
tableView:number-
OfRows:
method:
return [[masterColorList objectAtIndex:section] count];
Finally, you’d pull out content from the appropriate 
subarray when filling in your cells using the same 
type of nested messaging.
Once you’re working with sections, you can also 
think about creating headers and footers for each 
section. Figure 13.6 shows what the revised applica-
tion would look like so far, including two different 
sections, each of which has its own section header.
How do you create those section headers? As with 
all of the methods we’ve seen that fill in table views, 
the section header messages and properties show up 
in the 
UITableViewDataSource
protocol reference.
In order to create section headers, you write a 
tableView:titleForHeaderInSection:
method. As 
you’d expect, it renders a header for each individ- 
ual section.
An example of its use is shown in listing 13.6, 
though you could probably have done something 
fancier instead, such as building the section names 
directly into your array.
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section {
if (section == 0) {
return @"SDK Colors";
} else if (section == 1) {
return @"RGB Colors";
}
return 0;
}
You can similarly set footers, and otherwise manipulate sections according to the pro-
tocol reference.
Listing 13.6 To set a section header, define the return in the appropriate method
Figure 13.6 Section headers can 
improve the usability of table views.
Licensed to Nick Wood <nwood888@yahoo.com>
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Drag and drop your PDF in the box above and we'll convert the files for you. JPG is the most common image format on the internet.
bulk pdf to jpg converter online; best way to convert pdf to jpg
Online Convert Jpeg to PDF file. Best free online export Jpg image
Convert a JPG to PDF. the files, try out some settings and then create the PDF files with JPG is the most widely used image format, but we believe in diversity
convert multiple pdf to jpg; change file from pdf to jpg on
238
C
HAPTER
13 
Creating basic view controllers
There’s still more to the table view controller. Not only do you have to work with 
data when you’re setting it up, you also have to do so when it’s in active use, which usu-
ally occurs when your user selects individual cells. 
13.3.4 Using your table view controller
We’re not going to dwell too much on the more dynamic possibilities of the 
UITableViewController
here. For the most part, you’ll either use it to hold relatively 
static data (as we do here) or you’ll use it to interact with a navigation controller (as 
we’ll see in chapter 15). But before we finish up with table view controllers, we’re 
going to look at one other fundamental: selection.
SELECTED CELLS
If you try out the sample “tableex” application that you’ve been building throughout 
section 13.3, you’ll see that individual elements in a table view can be selected.
In table 13.7 we’ve already seen that there are some properties that apply explicitly 
to selected cells. For example, the following maintains the color of your text when it’s 
selected, rather than changing it to white, as per the default:
cell.selectedTextColor =
[[[masterColorList objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row] objectForKey:@"colorValue"];
As with the rest of the cell definitions, you’d put this line of code in
tableView:cell-
ForRowAtIndexPath:
. You should also note that this is another example of using 
nested arrays to provide section- and row-specific information for a table list.
The 
tableView:didSelectRowAtIndexPath:
method is the most important for 
dealing with selections. This method appears in the 
UITableViewDelegate
protocol 
and tells you when a row has been selected. The message includes an index path, 
which, as we’ve already seen, contains both a row and a section number.
Listing 13.7 shows a simple example of how you might use this method to check-
mark items in your list.
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[tableView cellForRowAtIndexPath:indexPath]
setAccessoryType:UITableViewCellAccessoryCheckmark];
}
You are able to easily retrieve the selected cell by using the index path, and then you 
use that information to set the accessory value. We’ll make more use of cell selection 
in chapter 15, when we talk about navigation controllers.
OTHER TABLE METHODS AND PROPERTIES
In the class reference, you’ll also find information on how you can edit, delete, and 
insert cells, scroll your table view, and otherwise actively use it. 
Listing 13.7 We can see when table cells are selected and act accordingly
Licensed to Nick Wood <nwood888@yahoo.com>
C# Create PDF from images Library to convert Jpeg, png images to
Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage.
convert pdf document to jpg; best convert pdf to jpg
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
change pdf to jpg online; convert pdf image to jpg image
239
Summary
13.4 Summary
View controllers are the most important building blocks of the 
SDK
that we had not 
yet seen. As was explained in this chapter, they sit atop views of all sorts and control 
how those views work. Even in this chapter’s simple examples, we saw some real-world 
examples of this control, as our view controllers managed rotation, filled tables, and 
reacted to selections.
Now that we’re getting into user interaction, we’re ready to examine how it works 
in a bit more depth, and that’s the focus of our next chapter. We’ll examine the 
underpinnings of user interaction: events and actions.
Licensed to Nick Wood <nwood888@yahoo.com>
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg. C# sample code for TIFF to jpg image conversion.
bulk pdf to jpg; change pdf file to jpg file
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
DotNetNuke), SharePoint. Get JPG, JPEG and other high quality image files from PDF document. Able to extract vector images from PDF. Extract
convert pdf file to jpg online; convert .pdf to .jpg online
240
Monitoring 
events and actions
In the previous chapter you learned how to create the basic view controllers that 
fulfill the controller role of an 
MVC
architectural model. You’re now ready to start 
accepting user input, since you can now send users off to the correct object. Users 
can interact with your program in two ways: by using the low-level event model or 
by using event-driven actions. In this chapter, you’ll learn the difference between 
the two types of interactions. Then we’ll look at notifications, a third way that your 
program can learn about user actions. 
Of these three models, it’s the events that provide the lowest-level detail (and 
which ultimately underlie everything else), and so we’ll begin with events.
14.1 An introduction to events
We briefly touched on the basics of event management in chapter 10, but as we said 
at the time, we wanted to put off a complete discussion until we could cover them 
in depth; we’re now ready to tackle that job.
This chapter covers
The SDK’s event modeling
How events and actions differ
Creating simple event- and action-driven apps
Licensed to Nick Wood <nwood888@yahoo.com>
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
DotNetNuke), SharePoint. Scan high quality image to PDF, tiff and various image formats, including JPG, JPEG, PNG, GIF, TIFF, etc. Able to
.pdf to .jpg converter online; .pdf to .jpg online
C# PDF insert image Library: insert images into PDF in C#.net, ASP
Support various image formats, like Jpeg or Jpg, Png, Gif, Bmp, Tiff and other bitmap images. Powerful .NET PDF image edit control, enable users to insert
conversion pdf to jpg; convert multi page pdf to jpg
241
An introduction to events
Part 1 of this book, dealing with web design, outlined how events tend to work on 
the iPhone. The fundamental unit of user input is the touch: a user puts his finger on 
the screen. This could be built into a multi-touch or a gesture, but the touch remains 
the building block on which everything else is constructed. It’s thus the basic unit that 
we’re going to be examining in this chapter.
14.1.1 The responder chain
When a touch occurs in an 
SDK
program, you have to worry 
about something you didn’t have to think about on the 
web: who responds to the event. That’s because 
SDK
pro-
grams are built of tens—perhaps hundreds—of different 
objects. Almost all of these objects are subclasses of the 
UIResponder
class, which means they contain all the func-
tionality required to respond to an event. So who gets 
to respond?
The answer is embedded in the concept of the 
responder chain. This is a hierarchy of different objects 
that are each given the opportunity, in turn, to answer an 
event message.
Figure 14.1 shows an example of how an event moves up 
the responder chain. It starts out at the first responder of the 
key window, which is typically the view where the event 
occurred—in other words, where the user touched the 
screen. As we’ve already noted, this first responder is prob-
ably a subclass of 
UIResponder
—which is the class reference 
you’ll want to look to for a lot of responder functionality.
Any object in the chain may accept an event and resolve it, but whenever that 
doesn’t occur the event moves further up the list of responders. From a view, an event 
will go to its superview, then its superview, until it eventually reaches the 
UIWindow
object, which is the superview of everything in your application. It’s useful to note that 
from the 
UIWindow
downward, the responder chain is the view hierarchy turned on its 
head, so when you’re building your hierarchies, they’ll be doing double duty.
Although figure 14.1 shows a direct connection from the first responder to the 
window, there could be any number of objects in this gap in a real-world program.
Often the normal flow of the responder chain will be interrupted by delegation. A 
specific object (usually a view) delegates another object (usually a view controller) to 
act for it. We already saw this put to use in our table view in chapter 13, but we now 
understand that a delegation occurs as part of the normal movement up the 
responder chain.
If an event gets all the way up through the responder chain to the window and it 
can’t deal with an event, then it moves up to the 
UIApplication
itself, which most fre-
quently punts the event to its own delegate: the application delegate, an object that we’ve 
been using in every program to date.
App
Delegate
The
Application
The
Window
First
Responder
Figure 14.1 Events on the 
iPhone are initially sent to 
the first responder, but then 
travel up the responder chain 
until someone accepts them.
Licensed to Nick Wood <nwood888@yahoo.com>
242
C
HAPTER
14 
Monitoring events and actions
Ultimately you, the programmer, will be the person who decides what in the re-
sponder chain will respond to events in your program. You should keep two factors in 
mind when you make this decision: how classes of events can be abstracted together at 
higher levels in your chain, and how you can build your event management using the 
concepts of 
MVC
.
At the end of this section we’ll address how you can subvert this responder chain 
by further regulating events, but for now let’s build on its standard setup.
14.1.2 Touches and events
Now that you know a bit about how events find their way to the appropriate object, we 
can dig into how they’re encoded by the 
SDK
. First we want to offer a caveat: usually 
you won’t need to worry about this level of detail because the standard 
UIK
it objects 
will generally convert low-level events into higher-level actions for you, as we discuss 
in the second half of this chapter. With that said, let’s look at the nuts and bolts of 
event encoding.
The 
SDK
abstracts events by combining a number of touches (which are repre-
sented by 
UITouch
objects) into an event (which is represented by a 
UIEvent
object). 
An event typically begins when the first finger touches the screen and ends when the 
last finger leaves the screen. In addition, it should generally only include those 
touches that happened in the same view.
In this chapter we’ll work mainly with 
UITouch
es (which make it easy to parse sin-
gle-touch events) and not with 
UIEvent
s (which are more important for parsing multi-
touch events). Let’s lead off with a more in-depth look at each.
First responders and keyboards
Before we leave this topic of responders behind, we’d like to mention that the first 
responder is a very important concept. Because this first responder is the object that 
can accept input, it’ll sometimes take a special action to show its readiness for input. 
This is particularly true for text objects like 
UITextField
and 
UITextView
, which (if 
editable) will pop up a keyboard when they become the first responder. This has two 
immediate consequences.
If you want to pop up a keyboard for the text object, you can do so by turning it into 
the first responder:
[myText becomeFirstResponder];
Similarly, if you want to get rid of a keyboard, you must tell your text object to stop 
being the first responder:
[myText resignFirstResponder];
We’ll discuss these ideas more when we encounter our first editable text object to-
ward the end of this chapter.
Licensed to Nick Wood <nwood888@yahoo.com>
243
An introduction to events
UITOUCH REFERENCE
UITouch
object is created when a finger is placed on the screen, moves on the 
screen, or is removed from the screen. A handful of properties and instance methods 
can give you additional information on the touch, as detailed in table 14.1. 
Together the methods and properties shown in table 14.1 offer considerable informa-
tion on a touch, including when and how it occurred.
Only the 
phase
property requires additional explanation. It returns a constant that 
can be set to one of five values: 
UITouchPhaseBegan
UITouchPhaseMoved
UITouch-
PhaseStationary
UITouchedPhaseEnded
, or 
UITouchPhaseCancelled
. You’ll often 
want to have different event responses based on exactly which phase a touch occurred 
in, as you’ll see in our event example.
UIEVENT REFERENCE
To make it easy to see how individual touches occur as part of more complex gestures, 
the iPhone 
SDK
organizes 
UITouch
es into 
UIEvent
s. Figure 14.2 shows how these two 
sorts of objects interrelate.
Just as with the 
UITouch
object, the 
UIEvent
object contains a number of properties 
and methods that you can use to figure out more information about your event, as 
described in table 14.2.
Table 14.1 Additional properties and methods can tell you precisely what happened during a touch event.
Method or property
Type
Summary
phase
Property
Returns a touch phase constant, which indicates 
whether touch began, moved, ended, or was canceled
tapCount
Property
The number of times the screen was tapped
timestamp
Property
When the touch occurred or changed
view
Property
The view where the touch began
window
Property
The window where the touch began
locationInView:
Method
Gives the current location of the touch in the specified 
view
previousLocationInView: Method
Gives the previous location of the touch in the specified 
view
UITouch
phase:
UITouchPhaseBegan
locationInView:
(10,15)
UITouch
phase:
UITouchPhaseEnded
locationInView:
(28,32)
UITouch
phase:
UITouchPhaseMoved
locationInView:
(28,32)
UIEvent
Figure 14.2 UIEvent 
objects contain a set of 
related UITouch objects.
Licensed to Nick Wood <nwood888@yahoo.com>
244
C
HAPTER
14 
Monitoring events and actions
The main use of a 
UIEvent
method is to give you a list of related touches that you can 
break down by several means. If you want to get a list of every touch in an event, or if 
you want to specify just gestures on a certain part of the screen, then you can do that 
with 
UIEvent
methods. This ends our discussion of event containers in this chapter.
Note that all of these methods compact their touches into an 
NSSet
, which is an 
object defined in the Foundation framework. You can find a good reference for the 
NSSet
at Apple’s developer resources site.
THE RESPONDER METHODS
So, how do you actually access these touches and/or events? You do so through a 
series of four different 
UIResponder
methods, which are summarized in table 14.3.
Each of these methods has two arguments: an 
NSSet
of touches that occurred during 
the phase in question and a 
UIEvent
that provides a link to the entire event’s worth of 
touches. You can choose to access either one, as you prefer; as we’ve said, we’re going 
to be playing with the bare touches. With that said, we’re now ready to dive into an 
actual example that demonstrates how to capture touches in a real-life program.
14.2 A touching example: the event reporter
Our sample application for events is something we call the event reporter, which will 
offer a variety of responses depending on how and when the iPhone screen is 
touched. We have two goals with our sample program.
Table 14.2 The encapsulating event object has a number of methods and properties 
that let you access its data.
Method or property
Type
Summary
timestamp
Property
The time of the event
allTouches
Method
All event touches associated with the receiver
touchesForView:
Method
All event touches associated with a view
touchesForWindow:
Method
All event touches associated with a window
Table 14.3 The UIResponder methods are the heart of capturing events.
Method
Summary
touchesBegan:withEvent:
Reports UITouchPhaseBegan events, for when fingers 
touch the screen
touchesMoved:withEvent:
Reports UITouchPhaseMoved events, for when fingers 
move across the screen
touchesEnded:withEvent:
Reports UITouchPhaseEnded events, for when fingers 
leave the screen
touchesCancelled:withEvent:
Reports UITouchPhaseCancelled events, for when 
the phone is put up to your head, or other events that might 
cause an external cancellation
Licensed to Nick Wood <nwood888@yahoo.com>
245
A touching example: the event reporter
First, we want to show you a cool and simple application that you can write using 
events, one that should get you thinking about everything you can do.
Second, we want to show some of the low-level details of how events work in a visual 
form. Therefore, if you actually take the trouble to code and compile this program, 
you’ll gain a better understanding of how the various phases work as well as how tap-
ping works.
You’ll kick off this development process by creating a project named eventreporter
that uses the View-Based Application template. That means you’ll start with a view con-
troller already in place. We’ll also use this example to show how an 
MVC
program can 
be structured.
14.2.1 Setting things up in Interface Builder
By now you should be comfortable enough 
with Interface Builder that you can set up all of 
your basic objects using it. For this program 
we’ve decided that we want to create three new 
objects: two button-shaped objects that will 
float around the screen to mark the beginning 
and end of touches, plus a status bar to go at 
the bottom of the screen and describe a few 
other events when they occur.
Because you want all of our new objects to 
lie beneath the view controller in the view hier-
archy, you call up the view controller’s own 
.xib file, eventreporterViewController.xib. As 
usual, you’ll add your new objects to the Main 
Display window that represents the view con-
troller’s view.
All of your work in Interface Builder is, of 
course, graphical, so we can’t show the code 
of this programming process. However, we 
have included a quick summary of the actions 
you should take. The results are shown in fig-
ure 14.3.
Set the background color of the 
UIView
to an attractive aluminum color. You do 
this on the Attributes tab of the Inspector window, as you would with most of 
your work in this project.
Create a 
UILabel
, stretch it across the bottom of the screen, and set the color to 
be steel. Also, clear out its text so that it doesn’t display anything at startup.
Create two 
UITextField
s. This class of objects is generally used to accept input, 
but we opted to use the objects for our pure display purposes because we liked 
their look. (Don’t worry; we’ll show how to use the full functionality of a 
UIText-
Field
toward the end of this chapter.) 
Figure 14.3 Two UITextFields (one  
of them hidden) and one UILabel, all set 
against an aluminum-colored background, 
complete the object creation we’ll need for 
our eventreporter project.
Licensed to Nick Wood <nwood888@yahoo.com>
Documents you may be interested
Documents you may be interested