- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 iOS 编程的新手。我已经阅读了很多关于这个问题的线程,但也无法弄清楚到底是什么导致了错误。我需要将 bookmarkViewController
tableview 的第一个 tableview 单元格文本传回 myViewController
的 URL 地址栏,当我单击第一个 tableview 的单元格时,它是根 ViewController。除了将此数据传递给根 ViewController 之外,一切正常,我正在为此使用委托(delegate)。
我的ViewController.h
#import "bookmarkViewController.h"
#import <UIKit/UIKit.h>
#import "historyViewController.h"
#import "AppDelegate.h"
#import "Reachability.h"
@interface myViewController : UIViewController <UITextFieldDelegate,UIAlertViewDelegate,secondViewControllerDelegate>
@property (weak, nonatomic) IBOutlet UIBarButtonItem *addButton;
@property (weak, nonatomic) IBOutlet UITextField *addressBar;
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UITextField *searchBar;
- (IBAction)goBack:(id)sender;
- (IBAction)goForward:(id)sender;
- (IBAction)refreshWebView:(id)sender;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goBackButton;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goForwardButton;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *refreshButton;
-(void)textFieldDidEndEditing:(UITextField *)textField;
- (void) loadWebPageFromString:(NSString *)string;
@end
myViewController.m
#import "myViewController.h"
@interface myViewController ()
@end
@implementation myViewController
-(void)loadView
{
[super loadView];
[_goBackButton setEnabled:NO];
}
- (void)webViewDidFinishLoad:(UIWebView *)webview
{
_addButton.enabled=YES;
_refreshButton.enabled=YES;
if ([_webView canGoBack]) {
[_goBackButton setEnabled:YES];
} else [_goBackButton setEnabled:NO];
if ([_webView canGoForward]) {
[_goForwardButton setEnabled:YES];
} else _goForwardButton.enabled=NO;
}
- (void)checkForWIFIConnection {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
if (netStatus!=ReachableViaWiFi)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection"
message:@"Your device is not connected to internet."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
- (void)viewDidLoad
{
_refreshButton.enabled=NO;
_addButton.enabled=NO;
[_goBackButton setEnabled:NO];
_goForwardButton.enabled=NO;
[self checkForWIFIConnection];
[super viewDidLoad];
}
-(void)textFieldDidEndEditing :(UITextField *)textField
{
if (textField.text){
if (textField==_searchBar){
AppDelegate *historydelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=historydelegate.historyArray;
NSString *b=[NSString stringWithFormat:@"http://www.google.com/search?q=%@",textField.text] ;
[a addObject:b];
}}}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)googleEntered:(UITextField *)sender {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
if (netStatus==ReachableViaWiFi){
[self loadWebPageFromString:_searchBar.text];
[self textFieldDidEndEditing:_searchBar];
_addressBar.text=[NSString stringWithFormat: @"http://www.google.com/search?q=%@",_searchBar.text] ;
}else {[self checkForWIFIConnection];self.addressBar.text=NULL;}
}
- (IBAction)goBack:(id)sender {
[_webView goBack];
_searchBar.text=NULL;
_addressBar.text=NULL;
}
- (IBAction)goForward:(id)sender {
[_webView goForward];
_searchBar.text=NULL;
}
- (IBAction)refreshWebView:(id)sender {
[_webView reload];
[self checkForWIFIConnection];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
AppDelegate *maindelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=maindelegate.bookmarksArray;
if([segue.identifier isEqualToString:@"segueOne"]){
if ([_addressBar.text length]!=0){
NSString *b=[NSString stringWithFormat:@"%@",_addressBar.text];
[a addObject:b];
}}}
- (void) loadWebPageFromString:(NSString *)string {
NSURL *url = [NSURL URLWithString:string];
NSString *googleSearch = [string stringByReplacingOccurrencesOfString:@" " withString:@"+"];
url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/search?q=%@", googleSearch]];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
[_webView loadRequest:request];
}
-(void)loadAddress:(NSString *)mystring{
NSURL *myurl = [NSURL URLWithString:mystring];
if(!myurl.scheme){
myurl = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", mystring]];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:myurl];
[_webView loadRequest:request];}
else{
myurl = [NSURL URLWithString:[NSString stringWithFormat:@"%@", mystring]];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:myurl];
[_webView loadRequest:request];
}
}
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (navigationType==UIWebViewNavigationTypeLinkClicked) {
NSURL *URL=[request URL];
[self checkForWIFIConnection];
if ([URL scheme] ) {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
if (netStatus==ReachableViaWiFi ){
_addressBar.text=URL.absoluteString;
_searchBar.text=NULL;
[_webView loadRequest:request];
AppDelegate *historydelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=historydelegate.historyArray;
[a addObject:URL.absoluteString];
}
}
return NO;
}
return YES;
}
- (BOOL) urlIsValid: (NSString *) url
{
NSString *regex =
@"((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
/// OR use this
///NSString *regex = "(http|ftp|https)://[\w-_]+(.[\w-_]+)+([\w-.,@?^=%&:/~+#]* [\w-\@?^=%&/~+#])?";
NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([regextest evaluateWithObject: url] == NO) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Invalid URL"
message:@"Enter valid URL."
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
return [regextest evaluateWithObject:url];
}
-(IBAction)addressEntered:(UITextField *)sender {
Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
if (netStatus==ReachableViaWiFi && [self urlIsValid:_addressBar.text]){
[self loadAddress:_addressBar.text];
AppDelegate *historydelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=historydelegate.historyArray;
[a addObject:_addressBar.text];
}else [self checkForWIFIConnection];
[sender resignFirstResponder];
_searchBar.text =NULL;
}
-(void)showView{
bookmarkViewController *b=[[bookmarkViewController alloc]initWithNibName:@"bookmarkViewController" bundle:nil];
b.delegate=self;
[self presentViewController:b animated:YES completion:nil];
}
- (void)passData:(NSString *)data
{
self.addressBar.text=data;
}
- (IBAction)go:(id)sender {
[self showView];
}
@end
书签 View Controller .h
@protocol secondViewControllerDelegate <NSObject>
@required
- (void)passData:(NSString *)data;
@end
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "myViewController.h"
@interface bookmarkViewController : UIViewController
@property (nonatomic, weak) id<secondViewControllerDelegate> delegate;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
- (IBAction)goBac:(id)sender;
@end
bookmarkViewController.m
#import "bookmarkViewController.h"
#import "AppDelegate.h"
@interface bookmarkViewController ()
@end
@implementation bookmarkViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
AppDelegate *maindelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=[maindelegate bookmarksArray];
cell.textLabel.text = [a objectAtIndex:[indexPath row]];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
if ([indexPath row]==0) {
if ([self.delegate respondsToSelector:@selector(passData:)]) {
[self.delegate passData:cell.textLabel.text];
}
[self dismissViewControllerAnimated:YES completion:nil];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
AppDelegate *maindelegate= (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSMutableArray *a=[maindelegate bookmarksArray];
return [a count];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[[self tableView] reloadData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)goBac:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
最佳答案
当选择一行时,不应使用 dequeueReusableCellWithIdentifier:
方法。仅当您实际上想要获得可重复使用的单元时才应使用它。您可以使用:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
if ([indexPath row]==0)
{
if ([self.delegate respondsToSelector:@selector(passData:)])
{
[self.delegate passData:cell.textLabel.text];
}
}
}
您不应该从 subview Controller 调用 dismissViewControllerAnimated:completion:
方法,这是父 View Controller 的工作。在你的委托(delegate)方法中:
- (void) passData:(NSString *)data
{
self.addressBar.text = data;
[self dismissViewControllerAnimated:YES completion:nil];
}
编辑:方法名称已更新。
关于ios - 将 Tableview 单元格的文本传递给 RootViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771525/
如果这个问题揭示了我知识中的大漏洞,我深表歉意。 我正在使用 setRootViewController 来切换 View ,因为我需要使用 SplitViewController。当我使用 setR
我有一个基本情况,当用户通过身份验证后,我删除当前屏幕(登录屏幕)并将其更改为应用程序内的另一个屏幕。 为此,我使用以下代码: if let appDelegate = UIApplication.s
我一直在做一个 Swift 项目,我有两个 View Controller ,登录 View Controller 和主页 View Controller 。当用户启动应用程序时,如果用户未登录,我想
我已经使用 SceneDelegate 在登录操作后更改 rootviewcontroller。它工作正常,但当我注销时,我无法再次执行导航。 这是我的 Scenekit 代码: let statu
我有一个应用程序,如果它在后台运行时间过长,我会在其中重新启动该应用程序。当用户在分配的时间后打开应用程序时,会发生重新初始化,并在获取所需数据时显示启动屏幕。当我从服务器获取数据时,我设置了 win
使用以下代码,我可以更改模态视图后面的rootViewController: let storyboard : UIStoryboard = UIStoryboard(name: "Main", bu
当应用程序被激活时,我正在创建一个文件。根据该文件的存在,加载不同的 View 。 我正在尝试的是 - (BOOL)application:(UIApplication *)application d
我正在开发一些自定义相机应用程序,我只想跳过我的登录页面并在用户已经注册时将我的相机主页设置为初始 Root View 。我是从 AppDelegate 或 View 代码内部执行此操作,但是我收到一
我是 iOS - Objective C 的新手,我正在尝试实现登录功能。我的 Storyboard 图如下所示: 因此,当有人单击帐户选项时,它会进入配置文件 View Controller ,并在
我的 iOS 应用程序在后台保持较长时间后会返回到 rootViewController。为了证明我有下面的图片 我一直导航到 ViewControllerC 并将应用程序保持在后台,当我返回应用程序
我有以下 Objective-C 代码来使用主屏幕快速操作启动我的应用程序: - (void)applyShortcutItem:(UIApplicationShortcutItem *)shortc
我正在构建一个在应用加载时执行大量设置的应用。因此,我有一个加载 View ,可以在设置发生时向用户显示一些信息... MyLoadingViewController *loadingViewCont
我想动态更改 rootViewController。这取决于 json 响应。我有一个 BOOL 值,它在收到 json 响应后发生变化。问题是即使条件为真,这个值也永远不会改变。 我的代码在下面,我
我想通过编码来制作导航 Controller 但是有一个问题:下面是我的代码 这是 Appdelegates.m #import "AppDelegate.h" #import "ViewContro
我的情况和this question很相似.我有一个通用的应用程序,其中 iPhone 为纵向,iPad 为横向,我使用 appDelegate.window.rootViewController =
我有一个 RegistrationViewController 和一个 LoginViewController: LoginViewController 是我的 InitialViewControll
有什么方法可以快速进入rootViewController?我想从堆栈中删除所有 View 并返回到 rootViewController,甚至不打扰它上面的 View 序列。 最佳答案 来自文档:
@IBAction func addButton(sender: AnyObject) { let alert = UIAlertController(title: "New Exercise
我想知道是否有人可以帮助我解决下面代码中的内存管理问题。我对 rootController 特别感兴趣,它是在我执行 initWithRootViewController 时被保留还是在窗口 addS
我的 iOS 应用打开时出现登录提示。一旦用户登录,它就会切换到主视图。 在 application:didFinishLaunchingWithOptions 中,我将 RootViewContro
我是一名优秀的程序员,十分优秀!