- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个联系人应用程序,我有一个 View ,用户可以在其中单击以查看有关该用户的“详细”信息。在此详细 View 中,它将仅显示具有值的字段,并隐藏其余字段。当用户点击“编辑”时,它会显示所有字段以允许用户编辑。
让我展示一些这个的屏幕
我正在使用第三方 StaticDataTableViewController隐藏和显示单元格的类。
这是我的实际问题我做了 this post我在其中询问如何更动态地处理电子邮件和电话号码,而不是定义“工作电子邮件”、“家庭电子邮件”、“工作电话”、“家庭电话”。
我需要找出一种方法来显示和表示动态生成的电子邮件/电话号码。如果用户有 5 个电话号码,那么我想显示 5 个电话号码加上他们的标签(家庭、工作)。我会将所有这些存储在 NSDictionaries 的 NSArray 中(键 = 标签,值 = 电子邮件/电话),每个联系人将有两个 NSArray。
我只需要一些帮助,了解如何同时保持动态和静态?我不想失去隐藏单元格的功能。
我将粘贴处理我的表格 View 的类。
SingleContactViewController.h
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import "PublicContactsViewController.h"
#import "Person.h"
#import "SingleContactTableViewCell.h"
#import "StaticDataTableViewController.h"
#import "DTAlertView.h"
@interface SingleContactViewController : StaticDataTableViewController <UITextFieldDelegate,UIAlertViewDelegate>
@property (nonatomic, strong) Person *person;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *editButton;
// TextFields are embedded in the cell, was just easier to make an outlet
@property (strong, nonatomic) IBOutlet UITextField *firstNameTextField;
@property (strong, nonatomic) IBOutlet UITextField *lastNameTextField;
@property (strong, nonatomic) IBOutlet UITextField *homeEmailTextField;
@property (strong, nonatomic) IBOutlet UITextField *workEmailTextField;
@property (strong, nonatomic) IBOutlet UITextField *companyNameTextField;
@property (strong, nonatomic) IBOutlet UITextField *homePhoneNumberTextField;
@property (strong, nonatomic) IBOutlet UITextField *workPhoneNumberTextField;
@property (strong, nonatomic) IBOutlet UITextField *cellPhoneNumberTextField;
// Outlet to cells to hide/unhide
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *firstNameCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *lastNameCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *homeEmailCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *workEmailCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *companyNameCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *homePhoneNumberCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *workPhoneNumberCell;
@property (weak, nonatomic) IBOutlet SingleContactTableViewCell *cellPhoneNumberCell;
@property (strong, nonatomic) IBOutlet SingleContactTableViewCell *deleteContactCell;
- (IBAction)deleteContact:(UIButton *)sender;
@end
SingleContactViewController.m
#import "SingleContactViewController.h"
#import "Person.h"
@interface SingleContactViewController ()
//@property (strong, nonatomic) IBOutlet ADBannerView *banner;
@property (nonatomic, assign) BOOL isEditing;
- (IBAction)popBackToContacts:(UIBarButtonItem *)sender;
- (IBAction)editContact:(UIBarButtonItem *)sender;
@end
@implementation SingleContactViewController
#pragma mark - Lifecycle methods
- (void)viewWillAppear:(BOOL)animated
{
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:.498 green:0 blue:.0 alpha:1];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.firstNameTextField.delegate = self;
[self populateFieldsAndHideEmptyCells];
//Disable the highlight effect of clicking a table row
[self.firstNameCell setSelectionStyle:UITableViewCellSelectionStyleNone];
[self.lastNameCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.homeEmailCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.workEmailCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.companyNameCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.homePhoneNumberCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.workPhoneNumberCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.cellPhoneNumberCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.deleteContactCell setSelectionStyle:UITableViewCellEditingStyleNone];
[self.tableView setBackgroundColor:[UIColor lightGrayColor]];
}
#pragma mark - Editing Methods
- (IBAction)editContact:(UIBarButtonItem *)sender {
NSLog(@"User pressed 'Edit' button. Entered editContact method");
if ([self isEditing]) {
NSLog(@"Turning edit more off");
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]initWithTitle:@"Edit" style:UIBarButtonSystemItemDone target:self action:@selector(editContact:)];
self.navigationItem.rightBarButtonItem = newButton;
_editButton = newButton;
[self updatePrivateContact];
self.isEditing = NO;
}
else {
NSLog(@"Turning edit mode on");
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonSystemItemEdit target:self action:@selector(editContact:)];
self.navigationItem.rightBarButtonItem = newButton;
_editButton = newButton;
self.isEditing = YES;
[self showAllFieldsForEditing];
}
}
#pragma mark - Hide/Show Table Cells
- (void)populateFieldsAndHideEmptyCells
{
self.hideSectionsWithHiddenRows = YES;
if([self.person.firstName length] == 0){
NSLog(@"firstName not present. Hide Cell");
[self cell:self.firstNameCell setHidden:YES];
}else{
self.firstNameTextField.text = [self.person firstName];
[self.firstNameTextField setClearButtonMode:UITextFieldViewModeNever];
[self.firstNameTextField setEnabled:NO];
}
if([self.person.lastName length] == 0){
NSLog(@"lastName not present. Hide Cell");
[self cell:self.lastNameCell setHidden:YES];
}else{
self.lastNameTextField.text = [self.person lastName];
[self.lastNameTextField setClearButtonMode:UITextFieldViewModeNever];
[self.lastNameTextField setEnabled:NO];
}
if([self.person.companyName length] == 0){
[self cell:self.companyNameCell setHidden:YES];
}else{
self.companyNameTextField.text = [self.person companyName];
[self.companyNameTextField setClearButtonMode:UITextFieldViewModeNever];
[self.companyNameTextField setEnabled:NO];
}
if([self.person.homeEmail length] == 0){
[self cell:self.homeEmailCell setHidden:YES];
}else{
self.homeEmailTextField.text = [self.person homeEmail];
[self.homeEmailTextField setClearButtonMode:UITextFieldViewModeNever];
[self.homeEmailTextField setEnabled:NO];
}
NSLog(@"person.workemail: %@",[self.person workEmail]);
if([self.person.workEmail length] == 0){
[self cell:self.workEmailCell setHidden:YES];
}else{
self.workEmailTextField.text = [self.person workEmail];
[self.workEmailTextField setClearButtonMode:UITextFieldViewModeNever];
[self.workEmailTextField setEnabled:NO];
}
if([self.person.homePhone length] == 0){
NSLog(@"home phone field not present. Hide Cell");
[self cell:self.homePhoneNumberCell setHidden:YES];
}else{
self.homePhoneNumberTextField.text = [self.person homePhone];
[self.homePhoneNumberTextField setClearButtonMode:UITextFieldViewModeNever];
[self.homePhoneNumberTextField setEnabled:NO];
}
if([self.person.workPhone length] == 0){
NSLog(@"work phone field not present. Hide Cell");
[self cell:self.workPhoneNumberCell setHidden:YES];
}else{
self.workPhoneNumberTextField.text = [self.person workPhone];
[self.workPhoneNumberTextField setClearButtonMode:UITextFieldViewModeNever];
[self.workPhoneNumberTextField setEnabled:NO];
}
if([self.person.cellPhone length] == 0){
NSLog(@"cell phone field not present. Hide Cell");
[self cell:self.cellPhoneNumberCell setHidden:YES];
}else{
self.cellPhoneNumberTextField.text = [self.person cellPhone];
[self.cellPhoneNumberTextField setClearButtonMode:UITextFieldViewModeNever];
[self.cellPhoneNumberTextField setEnabled:NO];
}
[self cell:self.deleteContactCell setHidden:YES]; // Only show on Edit
[self reloadDataAnimated:YES];
}
- (void) showAllFieldsForEditing
{
NSLog(@"showAllFieldsForEditing method entered");
self.hideSectionsWithHiddenRows = NO;
[self cell:self.firstNameCell setHidden:NO];
[self cell:self.lastNameCell setHidden:NO];
[self cell:self.companyNameCell setHidden:NO];
[self cell:self.homeEmailCell setHidden:NO];
[self cell:self.workEmailCell setHidden:NO];
[self cell:self.homePhoneNumberCell setHidden:NO];
[self cell:self.workPhoneNumberCell setHidden:NO];
[self cell:self.cellPhoneNumberCell setHidden:NO];
[self cell:self.deleteContactCell setHidden:NO];
[self.firstNameTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.lastNameTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.companyNameTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.homeEmailTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.workEmailTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.homePhoneNumberTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.workPhoneNumberTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.cellPhoneNumberTextField setClearButtonMode:UITextFieldViewModeUnlessEditing];
[self.firstNameTextField setEnabled:YES];
[self.lastNameTextField setEnabled:YES];
[self.companyNameTextField setEnabled:YES];
[self.workEmailTextField setEnabled:YES];
[self.homeEmailTextField setEnabled:YES];
[self.homePhoneNumberTextField setEnabled:YES];
[self.workPhoneNumberTextField setEnabled:YES];
[self.cellPhoneNumberTextField setEnabled:YES];
[self reloadDataAnimated:YES];
}
#pragma mark - Navigation Methods
- (IBAction)popBackToContacts:(UIBarButtonItem *)sender
{
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - Table View Methods
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO;
}
#pragma mark - Update Edit Data
- (void)updatePrivateContact
{
// Logic here to save to database
}
#pragma mark - Helper Methods
- (BOOL)isAnyEmailPresent
{
if([self.person homeEmail] != nil || [self.person workEmail] != nil){
return YES;
}else{
return NO;
}
}
- (Person *)populatePersonToSave
{
Person *person = [[Person alloc] init];
person.firstName = self.firstNameTextField.text;
person.lastName = self.lastNameTextField.text;
person.workEmail = self.workEmailTextField.text;
person.homeEmail = self.homeEmailTextField.text;
person.companyName = self.companyNameTextField.text;
person.homePhone = self.homePhoneNumberTextField.text;
person.workPhone = self.workPhoneNumberTextField.text;
person.cellPhone = self.cellPhoneNumberTextField.text;
return person;
}
#pragma mark - Table View Methods
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor lightGrayColor];
cell.textLabel.textColor = [UIColor whiteColor];
}
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
// Set the text color of our header/footer text.
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
[header.textLabel setTextColor:[UIColor whiteColor]];
// Set the background color of our header/footer.
header.contentView.backgroundColor = [UIColor lightGrayColor];
// You can also do this to set the background color of our header/footer,
// but the gradients/other effects will be retained.
// view.tintColor = [UIColor blackColor];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0) {
return nil;
} else {
return [super tableView:tableView titleForHeaderInSection:section];
}
}
@end
最佳答案
查看代码后。 StaticDataTableViewController 使用 tableview 来显示您希望它根据自己的“OriginalRow”类显示的单元格。
它们保存在属性“行”下的“OriginalSection”类中的可变数组中。
原始部分保存在名为“sections”的属性下的“OriginalTable”类的可变数组中
原始表格是您对表格应包含的内容的主要定义,并保存在名为“originalTable”的属性下的“StaticDataTableViewController”中
确定要显示哪些单元格和隐藏哪些单元格的所有业务都在“-[OriginalTable prepareUpdates]”中完成,它遍历各个部分和其中的每一行以确定要显示什么和隐藏什么。
“-[OriginalTable sections]”数组和“-[OriginalSection rows]”数组分别继续包含所有部分和行,无论它们是否可见或不可见,因此如果您编辑这些数组并调用“-[StaticDataTableViewController reloadData] "您将获得您正在寻找的操作。
要完成此操作,您需要将每个类的“@interface”移至标题,以便您可以访问它。
当您将 OriginalRow、OriginalSection 和 OriginalTable 的“@interface”移动到标题时,您就完成了大部分工作。
最后要做的是将属性从 StaticDataTableViewController 的私有(private)类别移动到公共(public)接口(interface)。
@interface StaticDataTableViewController ()
@property (nonatomic, strong) OriginalTable * originalTable; // Cut this line.
@end
将标记的行移至公共(public)界面中的表头,使其成为公共(public)属性
@interface StaticDataTableViewController : UITableViewController // Paste after this line
完成这些更改后,您应该能够随意添加和删除节和行。
[[[[ThisStaticTable.originalTable sections] objectAtIndex:0] rows]
insertObject:myNewOriginalRow atIndex:2];
[ThisStaticTable reloadData];
这应该会让您顺利上路。
关于ios - 我应该重新设计这个实现还是可以动态地将单元格添加到 StaticTableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20942009/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!