How can I show table view cell values after click button? - objective-c

I have a table view and it is load from table view cells. But I want to see this table's values after click a button.
With this method - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;,
I can see all data when view did load.
But firstly I dont want to see datas. I want to see thats after click a button. How can I do this?

Keep your table source equal to nil, then when the button is pressed set it to the list of values you need and reload the table view.
so ... if your table source is let's say the ivar NSArray* tableData, and the array with your values is the ivar NSArray* values then in your IBAction for your button you should do :
-(IBAction)buttonPressed:(id)sender
{
tableData = values; //load the values in the table source
[self.tableView reloadData]; //just call reloadData on the tableView
}
That's about it

Have a private BOOL property in your subclass of UITableViewController that keeps track of whether or not the button has been pressed. Then, in tableView:CellForRowAtIndexPath: load cells differently based on the value of that property. When the property is set, call [self.tableview reloadData] (capitalization might be wrong).

Related

Adding Text Field Data to Table Cell

How I can store text field data in a view controller into a tableView cell in a TableViewController With Xcode using data source?
That means when the user taps "+" it will show another view that has the text field. When the user enters the text and presses save, the entered data will be stored as a table cell.
First make sure you understand data sources. Then you have to implement
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return self.data.count;
}
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSTableCellView * result = [tableView makeViewWithIdentifier:#"identifier" owner:self];
result.textField = #"Your special string";
return result;
}
After having setup it in IB like this and having connected the outlet of the Table View data source to your custom objects class (the class the above code is in) it should look like this
Please notice I used the same identifier as in the code so that I can get the created table cell view back easily.
self.data could be an array for example in which you store all your underlying objects (for the cell creation).
Of course you could also add any kind of UI elements to the cell view as well. In this case I use a custom subclass for the cell view. You would have to do something like this then (and set your class as the class of the cell view within IB of course. This is the part in the screenshot that has an NSTableCellView currently in it. It had to be MyGreatCellView from now on):
#interface MyGreatCellView : NSTableCellView {
IBOutlet NSTextField *files;
}
#property (assign) NSTextField *files;
Then you could also refer to result.files in the tableView:vieForTableColumn:row for example.
If something is unclear, just ask.
Getting the UITextField data onto a TableView Cell.
Here is a query for some one for the same issue.I think it will help you.

Can I add a disclosure Button to only one cell in my UITableView?

I have a UITableView and I want to add a disclosure button to a cell but only when the cell is selected.
How can i do it?
Thanks
in tableView:didSelectRowAtIndexPath: save the indexPath to a member variable.
in tableview:cellForRowAtIndexPath: check, if the indexPath is the saved one and set cell.accessoryType
Do it in
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//bla bla bla
}
Remember to have a variable to remove the button from the previous selected cell
In the table view cell set the accessoryType or accessoryView property. You will want to do this in the -tableView:didSelectRowAtIndexPath: delegate method.
Doing it in didSelect means that the disclosureButton only appears after the user releases the selected cell. If you want ti to appear when the cell is highlighted, you need to subclass UITableViewCell and override setSelected: or setHighlighted:
However, the whole point of a disclosureButton is that the button can be pressed and does something different then simply selecting the cell. For that there is the disclosure indicator. The whole premise of making either of these show up only when the cell is highlighted/selected doesn't seem to serve any good UI design purpose in my opinion...but maybe for what you want it does make sense.

Table view cell as button

I'm trying to set a Table View Cell that has been grouped, as a button however I can't seem to find where to do it in the interface builder in XCode 4.2 or programmatically.
I've tried linking the table view cell to an IBAction, however it only lets me create or link to an IBOutlet.
As a temporary fix I have embedded a rectangle button in the cell, but this doesn't highlight blue when pressed.
I've seen this work in several apps, an example is the Clear History and Clear Cookies and Data buttons in the Safari app below:
Imagine that your IBAction is like this:
-(IBAction)buttonPressed{
//Do my stuff
}
Then, you should do this in your delegate:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//check if your cell is pressed
BOOL myCellIsPressed = ...
if(myCellIsPressed)
[self buttonPressed];
}
To check if your cell was pressed, you have several ways, for example, if you know the row of your button in the table:
int myCellRow = 5;
if (myCellRow == IndexPath.row) //YES!
Or you can put a tag in your cell and then check if is that one:
#define myTag 5
When creating the cell:
UITableViewCell *myCell = ...
myCell.tag = myTag
And in didSelectRowAtIndexPath:
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if (selectedCell.tag == myTag) //YES!
these aren't buttons..
The function of clear cookies and other things are processed in
table view delegate method
tableview : didselectRow
There you can find which section and which row is selected and perform functions based on that.

How to control a view with different UITableViewControllers based on parent table selection

I have a Split-View iPad application and I fixed the selections in the popover (RootViewController) to be static, let's say red, yellow, and blue. When my app starts I have preselected red or the top static text in the cell. I was able to add UITableViewDelegate and UITableViewDataSource with the other templates in DetailViewController. It's the one with the popover-no-popover default split-view app.
I added the row count and the cell method and voila' my test array populated the detail table. I want a separate controller (delegate and source) for each selection the user chooses to be driven from didSelectRowAtIndexPath in the RootViewController.
Should I just add the delegate and datasource templates to the DetailViewController and switch the data based on selections in the RootViewController view?
Or, would my multiple controller pattern be better design?
I would like some assistance as to how to get the outside controller to have control of the DetailViewController's UITableView. The DetailViewController is where I instantiate the add button and such to the toolbar. E.g. when I added the single (Red) test controller to the DetailViewController, any connection to the TableView wasn't seemingly automatic in IB. You could hover and then it would eventually connect to "View" (ultimately the UITableView). I've tried everything and I cannot get a simple delegate and datasource controller with a simple NSArray to populate the DetailViewController's table view from RootViewController's didSelectRowAtIndexPath. This method works because I've debugged and NSLogged the selections. I'm not creating my ProjectViewController (test or first static text in RootViewController) correctly. I'll paste some code that I've tried here too.
- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// select static row and view controller
Punch *obj = [self.punchList punchAtIndex:indexPath.row];
NSLog(#"Selected punch object: %#", obj.name);
ProjectViewController *projectViewController = [[UITableViewController alloc] init];
[projectViewController tableView:detailViewController.tmpView];
}
The ProjectViewController code works if hard-coded in DetailViewController, i.e. the required methods, the count, and the array loaded cells and the I want this data population in separate controllers because I'm going to use Core-Data in the end.

Is there a way to change sectioned tableview to drilldown tableview?

I have a sectioned tableview with a plist wich is an array filled with dictionaries.
In my app all sections and cells are shown on the first view.
But now I need to change it to look like this: sections have to become cells(with names of sections). When you press this cell the cells contained in section have appear.
Is there a way to do it without too much rewriting the code?
Thanks and sorry for the noob question :o)
I understand, that you still want to use one tableview, where cells are hidden for all sections except one. In that case you can do this:
Implement -tableView:headerForSection: and place a button on the view that you will return. Write the sections number on the buttons tag. Add an action to the button with parameter (UIButton *)sender: `-(void) headerPressed:(UIButton *)sender
You need to implement -tableView:heightforHeaderInSection: as-well.
-(void) headerPressed:(UIButton *)sender writes the senders tag to a member integer and reloads the tableview.
in -tableview:numberOfRowsInSection: you return 0 if the sections int is not equal to the member integer you saved. If it is equal, return the number of rows in that section.
You will need to create two table view classes. One for the one that holds the section names, and the other that holds the rows of each section. In the first one, retrieve the section names from the plist and populate the rows in the table accordingly. Then in the - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath method you need to push another view controller onto the navigation stack(something like this-provided in the template code):
// Navigation logic may go here. Create and push another view controller.
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:#"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
Then for the other table view class you populate it by reading in the info from the plist that corresponds to the tapped section. Hope this helps.