精华内容
下载资源
问答
  • 视图切换

    2015-01-28 15:22:05
    实现的功能:通过Navigation,实现多视图切换。这是使用最多的一种多视图实现方式。 关键词:多视图 Navigation UINagivationController 1、创建一个Empty Application工程,命名为:MultiView-Navigation,...

    实现的功能:通过Navigation,实现多视图切换。这是使用最多的一种多视图实现方式。


    关键词:多视图 Navigation UINagivationController

    1、创建一个Empty Application工程,命名为:MultiView-Navigation,如下图


    2、选中工程中的Group MultiView-Tab,然后按住CMD(Windows键)+N,新建视图控制器FirstViewController

    3、依照上步操作,新建视图控制器SecondViewController

    4、修改AppDelegate.h,修改后如下:



    1. //  
    2. //  AppDelegate.h  
    3. //  MultiView-Navigation  
    4. //  
    5. //  Created by Zhang Yanguang on 12-11-21.  
    6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    7. //  
    8.   
    9. #import <UIKit/UIKit.h>  
    10. #import "FirstViewController.h"  
    11. #import "SecondViewController.h"  
    12.   
    13. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
    14.   
    15. @property (strong, nonatomic) UIWindow *window;  
    16.   
    17. @property (strong, nonatomic) UINavigationController *navigationController;//导航视图控制器对象  
    18. @end  

    5、修改AppDelegate.m,主要是修改didFinishLaunchingWithOptions方法,修改后如下:



    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
    2. {  
    3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
    4.     // Override point for customization after application launch.  
    5.     FirstViewController *firstViewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];  
    6.     //初始化navigationController,将firstViewController作为根视图控制器  
    7.     navigationController = [[UINavigationController alloc]initWithRootViewController:firstViewController];//备注1  
    8.     [self.window addSubview:navigationController.view];  
    9.       
    10.     self.window.backgroundColor = [UIColor whiteColor];  
    11.     [self.window makeKeyAndVisible];  
    12.     return YES;  
    13. }  


    6、修改FirstViewController.h,添加goSecondView方法:



    1. //  
    2. //  FirstViewController.h  
    3. //  MultiView-Navigation  
    4. //  
    5. //  Created by Zhang Yanguang on 12-11-21.  
    6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    7. //  
    8.   
    9. #import <UIKit/UIKit.h>  
    10. #import "SecondViewController.h"  
    11. @interface FirstViewController : UIViewController  
    12.   
    13. -(void)goSecondView;  
    14. @end  

    7、修改FirstViewController.m,主要是修改initWithNibName及实现goSecondView方法:



    1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
    2. {  
    3.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
    4.     if (self) {  
    5.         // Custom initialization  
    6.         self.title = @"First View";  
    7.         self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"SecondView" style:UIBarButtonItemStyleBordered target:self action:@selector(goSecondView)];  
    8.           
    9.     }  
    10.     return self;  
    11. }  
    12.   
    13. -(void)goSecondView{  
    14.     SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];  
    15.     //跳转到secondViewController  
    16.     [self.navigationController pushViewController:secondViewController animated:YES];//备注2  
    17. }  


    8、视图控制器SecondViewController,仅修改SecondViewController.m中的initWithNibName方法,如下:





    1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
    2. {  
    3.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
    4.     if (self) {  
    5.         // Custom initialization  
    6.         self.title = @"SecondView";  
    7.     }  
    8.     return self;  
    9. }  

    代码解释:


    备注1:firstViewController被push到navigationController中。

    备注2:self.navigationController的英文注释为:// If this view controller has been pushed onto a navigation controller, return it.

    所以,self.navigationController返回的正是备注1中的navigationController


    10、Navigation通常与TableView搭配使用,博文iPhone开发【七】常用控件之表TableView 编写了一个TableView的示例,那是一个单视图应用,现在搭配上Navigation将其修改为多视图应用。

    11、将TableView示例工程复制一份名称修改为TableViewDemo-Nav,打开该工程进行修改。

    12、首先,修改AppDelegate,添加UINavigationController的实例,AppDelegate.h修改后如下:


    1. //  
    2. //  AppDelegate.h  
    3. //  TableViewDemo  
    4. //  
    5. //  Created by Zhang Yanguang on 12-10-25.  
    6. //  博文:http://blog.csdn.net/m_changgong/article/details/8115137  
    7. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    8. //  
    9.   
    10. #import <UIKit/UIKit.h>  
    11.   
    12. @class ViewController;  
    13.   
    14. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
    15.   
    16. @property (strong, nonatomic) UIWindow *window;  
    17.   
    18. @property (strong, nonatomic) ViewController *viewController;  
    19. //添加navigationController  
    20. @property (strong, nonatomic) UINavigationController *navigationController;  
    21. @end  


    修改AppDelegate.m中的didFinishLaunchingWithOptions方法,如下:



    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
    2. {  
    3.     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
    4.     // Override point for customization after application launch.  
    5.     self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];  
    6.     //注释掉下面一行代码  
    7.     /* 
    8.     self.window.rootViewController = self.viewController;*/  
    9.     //添加如下代码  
    10.     self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.viewController];  
    11.     [self.window addSubview:self.navigationController.view];  
    12.       
    13.     [self.window makeKeyAndVisible];  
    14.     return YES;  
    15. }  

    13、新建视图控制器AppViewController(带xib),如下:



    14、ViewController.h修改后如下:


    1. //  
    2. //  ViewController.h  
    3. //  TableViewDemo  
    4. //  
    5. //  Created by Zhang Yanguang on 12-10-25.  
    6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    7. //  
    8.   
    9. #import <UIKit/UIKit.h>  
    10. #import "AppViewController.h"  
    11. @interface ViewController : UIViewController  
    12.   
    13. @property(nonatomic,retain)NSMutableArray *apps;  
    14. @property(nonatomic,retain)AppViewController *appViewController;  
    15. @end  

    ViewController.m中主要是实现了-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法,如下:





    1. //实现didSelectRowAtIndexPath  
    2. -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{  
    3.     NSString *imageName = [NSString stringWithFormat:@"%d",[indexPath row]+1];  
    4.     NSString *appName = [apps objectAtIndex:[indexPath row]];  
    5.     //初始化appViewController  
    6.     appViewController = [[AppViewController alloc]initWithNibName:@"AppViewController" bundle:nil];  
    7.     //传递参数  
    8.     appViewController.appName = appName;  
    9.     appViewController.appIconName = imageName;  
    10.     //跳转到appViewController  
    11.     [self.navigationController pushViewController:appViewController animated:YES];  
    12. }  

    15、AppViewController.h如下:


    1. //  
    2. //  AppViewController.h  
    3. //  TableViewDemo  
    4. //  
    5. //  Created by Zhang Yanguang on 12-11-21.  
    6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    7. //  
    8.   
    9. #import <UIKit/UIKit.h>  
    10.   
    11. @interface AppViewController : UIViewController  
    12.   
    13. @property(strong,nonatomic)NSString *appName;  
    14. @property(strong,nonatomic)NSString *appIconName;  
    15.   
    16. @property(strong,nonatomic)IBOutlet UILabel *appNameLabel;  
    17. @property(strong,nonatomic)IBOutlet UIImageView *appIconImgView;  
    18. @end <font face="Microsoft YaHei" size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font size="4"><font face="Microsoft YaHei" size="4"><span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">  
    19. </span></span></span></span></span></span></span></span></span></font></font></font></font></font></font></font></font></font></font></font></font></font>  


    注意:将输出口与AppViewController.xib中的UI控件相连。AppViewController.xib如下:



    [cpp] view plaincopy



    1. //  
    2. //  AppViewController.m  
    3. //  TableViewDemo  
    4. //  
    5. //  Created by Zhang Yanguang on 12-11-21.  
    6. //  Copyright (c) 2012年 MyCompanyName. All rights reserved.  
    7. //  
    8.   
    9. #import "AppViewController.h"  
    10.   
    11. @interface AppViewController ()  
    12.   
    13. @end  
    14.   
    15. @implementation AppViewController  
    16. @synthesize appName;  
    17. @synthesize appIconName;  
    18. @synthesize appNameLabel;  
    19. @synthesize appIconImgView;  
    20.   
    21. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
    22. {  
    23.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
    24.     if (self) {  
    25.         self.title = @"AppViewController";  
    26.     }  
    27.     return self;  
    28. }  
    29.   
    30. - (void)viewDidLoad  
    31. {  
    32.     [super viewDidLoad];  
    33.     // Do any additional setup after loading the view from its nib.  
    34.       
    35.     self.appNameLabel.text = appName;  
    36.     self.appIconImgView.image = [UIImage imageNamed:appIconName];  
    37.       
    38.     NSLog(@"appName=%@,appIconName=%@",appName,appIconName);  
    39. }  
    40.   
    41. - (void)viewDidUnload  
    42. {  
    43.     [super viewDidUnload];  
    44.     // Release any retained subviews of the main view.  
    45.     // e.g. self.myOutlet = nil;  
    46.     appName = nil;  
    47.     appIconName = nil;  
    48.     appNameLabel = nil;  
    49.     appIconImgView = nil;  
    50. }  
    51.   
    52. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
    53. {  
    54.     return (interfaceOrientation == UIInterfaceOrientationPortrait);  
    55. }  
    56.   
    57. @end  


    展开全文
  • 工作流收到任务后,进入任务页面,可展示模板视图和详细信息页面,其中模板视图可使用任务表单模板进行自定义修改; 组织或者站点下, 首选项管理(Preference Management)> 工作流(Workflow)> 使用任务...

    工作流收到任务后,进入任务页面,可展示模板视图和详细信息页面,其中模板视图可使用任务表单模板进行自定义修改;

    组织或者站点下, 首选项管理(Preference Management)> 工作流(Workflow)> 使用任务表单模板来生成任务详细信息页面(Use task form template to generate the task details page)
    右键设置首选项,修改值
    否:任务页面为详细信息页面
    是:采用模板视图,展示任务表单模板

    展开全文
  • WDA-5-VIEW视图切换

    2019-09-26 05:01:55
    这一部分介绍同一窗口下不同视图之间的链接跳转。 前提:完成上一步骤MAIN视图ALV显示。 1.效果展示  点击ALV物料下划线链接,页面跳转到物料明细页面。 2.实现过程  基于上一步骤在MAIN页面显示ALV物料...

    这一部分介绍同一窗口下不同视图之间的链接跳转。

    前提:完成上一步骤MAIN视图ALV显示。

    1.效果展示

     点击ALV物料下划线链接,页面跳转到物料明细页面。

    2.实现过程

     基于上一步骤在MAIN页面显示ALV物料信息,通过ALV物料下划链接跳转到物料明细页面。

     物料明细页面主要有两部分:基本信息、工厂物料明细。

     这两部分信息需要增加两个节点(ZSMM_DETAIL-基本信息 ZSMM_ITEM-工厂物料明细)、一个ALV组件(工厂物料明细)。

     2.1Context增加节点

     2.1.1进入Componentcontroller组件控制页,增加节点ZSMM_DETAIL(基本信息),记录数据有且只有一条,则Cardinality=1..1 Selection=0..1

     

     增加节点ZSMM_ITEM(工厂物料明细),记录数据可能有多条,则Cardinality = 0..n selection = 0..1

     

     2.1.2进入视图VIEW-MAIN同上新增节点

     

     2.2增加ALV组件

     

     进入Componentcontroller增加ALV组件ALV_DETAIL,如下图所示:

     

     窗口WINDOWS增加ALV组件

     

     2.3新增视图MATERIAL_DETAIL

     属性页增加组件ALV_DETAIL,显示工厂物料明细。

     

     布局页面如下:基本信息数据绑定的是节点ZSMM_DETAIL

     

     

     

     Context节点设置(同2.1部分的操作)

     

     Attributes属性页

     

     Actions动作事件页

     

     Methods方法页

     

     2.4VIEW视图之间跳转

     设置VIEW视图MAIN、MATERIAL_DETAIL之间的跳转:MAIN视图通过ALV下划链接跳转到MATERIAL_DETAIL视图,MATERIAL_DETAIL视图返回按钮触发后返回到MAIN视图

     2.4.1设置MAIN视图:Inbound Plugs/Outbound Plugs

     FROM_DETAIL来自MATERIAL_DETAIL视图的事件

     

     TO_DETAIL输出参数到MATERIAL_DETAIL视图,当前参数为空。

     

     2.4.2设置MATERIAL_DETAIL视图:Inbound Plugs/Outbound Plugs

     

     

     2.5窗口WINDOWS嵌套视图

     在一个窗口中实现视图之间的跳转。

     

     2.6代码部分

     2.6.1视图MAIN方法METHODS:ON_LINK

     视图MAIN中ALV行项目物料MATNR下划线链接触发事件ON_LINK

     

     代码部分:

    method on_link .
      "定义
      data:
        lo_nd_detail type ref to if_wd_context_node,      "节点
        lo_el_detail type ref to if_wd_context_element,   "元素
        ls_detail    type wd_this->element_zsmm_detail. "结构
    
    **Main获取ALV选择行记录
      data:
        lo_nd_alv type ref to if_wd_context_node,       "节点
        lt_alv    type wd_this->elements_zsmm_material, "表体
        ls_alv    type wd_this->element_zsmm_material.  "结构
    
      "获取节点
      lo_nd_alv = wd_context->get_child_node( name = wd_this->wdctx_zsmm_material ).
      "获取内表
      lo_nd_alv->get_static_attributes_table( importing table = lt_alv ).
      "获取行记录
      if lt_alv[] is not initial.
        read table lt_alv index r_param->index into ls_alv.
      endif.
    
    **Material_detail基本信息
      "获取节点 context-zsmm_material
      lo_nd_detail = wd_context->get_child_node( name = wd_this->wdctx_zsmm_detail ).
      "获取结构记录
      ls_detail = ls_alv.
    
      "获取节点元素清单
      lo_el_detail = lo_nd_detail->get_element( ).
      "节点元素中的属性赋值
      lo_el_detail->set_static_attributes(  static_attributes = ls_detail ).
    
    **Material_detail物料明细
      data:
        lo_nd_item type ref to if_wd_context_node,      "节点
        lo_el_item type ref to if_wd_context_element,   "元素
        lt_item    type wd_this->elements_zsmm_item,    "表体
        ls_item    type wd_this->element_zsmm_item.     "结构
    
      "获取节点zsmm_item
      lo_nd_item = wd_context->get_child_node( name = wd_this->wdctx_zsmm_item ).
    
      select *
        into corresponding fields of table lt_item
        from marc
       where matnr = ls_alv-matnr.
    
      "Data binding 节点ZSMM_ITEM绑定数据IT_ITEM
      lo_nd_item->bind_table(
        new_items            = lt_item      "数据表
        set_initial_elements = abap_true    "abap_true原始记录清空并新增记录
        ).
    
      "跳转到MATERIAL_DETAIL物料明细视图
      wd_this->fire_to_detail_plg( ).
    endmethod.

     备注:fire_to_detail_plg( )是在MAIN视图中设置Outbound Plugs-to_detail生成的跳转方法。

     2.6.2视图MATERIAL_DETAIL方法:ONACTIONBT_BACK

     视图MATERIAL_DETAIL中按钮ONACTIONBT_BACK触发事件,返回MAIN视图

     

     代码部分:

    method ONACTIONBT_BACK .
      "返回MAIN视图
      wd_this->fire_to_main_plg( ).
    endmethod.

     备注:fire_to_main_plg( )是在MATERIAL_DETAIL视图中Outbound Plugs-TO_MAIN生成的跳转方法。

     2.6.3初始化ALV组件:ALV_ITEM

     在视图MATERIAL_DETAIL中增加了ALV组件,显示工厂物料明细。需对ALV进行初始化。

     进入Componentcontroller界面METHODS方法:INIT_ALV_DETAIL

     代码部分:

    method INIT_ALV_DETAIL .
      data:
        lo_nd_item     type ref to if_wd_context_node,
        lo_cmp_alv     type ref to if_wd_component_usage,
        lo_cmpif_alv   type ref to iwci_salv_wd_table,
        lo_config      type ref to cl_salv_wd_config_table.
    
    * alv component usage
      lo_cmp_alv = wd_this->wd_cpuse_alv_detail( ).     "Properties->component use
      if lo_cmp_alv->has_active_component( ) is initial.
        lo_cmp_alv->create_component( ).
      endif.
    
    * set data node
      lo_nd_item    = wd_context->get_child_node( name = wd_this->wdctx_zsmm_item ). "context-node
      lo_cmpif_alv  = wd_this->wd_cpifc_alv_detail( ).  "Properties->component use
      lo_cmpif_alv->set_data( lo_nd_item ).
    
    * configure alv
      lo_config = lo_cmpif_alv->get_model( ).
    
    * table settings
      lo_config->if_salv_wd_table_settings~set_fixed_table_layout( value = abap_true ).
      lo_config->if_salv_wd_table_settings~set_visible_row_count( 5 ).
      lo_config->if_salv_wd_table_settings~set_width( '100%' ).
      lo_config->if_salv_wd_table_settings~set_footer_visible( if_salv_wd_c_table_settings=>footer_visible_on_demand ).
      lo_config->if_salv_wd_table_settings~set_scrollable_col_count( 3 ).
      lo_config->if_salv_wd_table_settings~set_read_only( abap_false ).
      lo_config->if_salv_wd_table_settings~set_data_check( if_salv_wd_c_table_settings=>data_check_on_cell_event ).
    
      lo_config->if_salv_wd_std_functions~set_view_list_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_pdf_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
      lo_config->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
    
    * table toolbar
    *  data:
    *    lo_fun_add  type ref to cl_salv_wd_function,
    *    lo_btn_add  type ref to cl_salv_wd_fe_button,
    *    lo_fun_chg  type ref to cl_salv_wd_function,
    *    lo_btn_chg  type ref to cl_salv_wd_fe_button,
    *    lo_fun_del  type ref to cl_salv_wd_function,
    *    lo_btn_del  type ref to cl_salv_wd_fe_button,
    *    lo_fun_save type ref to cl_salv_wd_function,
    *    lo_btn_save type ref to cl_salv_wd_fe_button.
    *
    *  lo_fun_add = lo_config->if_salv_wd_function_settings~create_function( 'BT_ADD' ).
    *  create object lo_btn_add.
    *  lo_btn_add->set_text( wd_assist->get_text( key = 'B01' ) ).
    *  lo_btn_add->set_image_source( value = '~Icon/AddRow' ).
    *  lo_fun_add->set_editor( lo_btn_add ).
    *
    *  lo_fun_chg = lo_config->if_salv_wd_function_settings~create_function( 'BT_CHG' ).
    *  create object lo_btn_chg.
    *  lo_btn_chg->set_text( wd_assist->get_text( key = 'B02' ) ).
    *  lo_btn_chg->set_image_source( value = '~Icon/EditChangedItem' ).
    *  lo_fun_chg->set_editor( lo_btn_chg ).
    *
    *  lo_fun_del = lo_config->if_salv_wd_function_settings~create_function( 'BT_DEL' ).
    *  create object lo_btn_del.
    *  lo_btn_del->set_text( wd_assist->get_text( key = 'B03' ) ).
    *  lo_btn_del->set_image_source( value = '~Icon/DeletedItem' ).
    *  lo_fun_del->set_editor( lo_btn_del ).
    *
    *  lo_fun_save = lo_config->if_salv_wd_function_settings~create_function( 'BT_SAVE' ).
    *  create object lo_btn_save.
    *  lo_btn_save->set_text( wd_assist->get_text( key = 'B04' ) ).
    *  lo_btn_save->set_image_source( value = '~Icon/Save' ).
    *  lo_fun_save->set_editor( lo_btn_save ).
    
    * table columns and column header
      data:
        lt_columns         type salv_wd_t_column_ref,
        ls_column          type salv_wd_s_column_ref,
        lo_column          type ref to cl_salv_wd_column,
        lo_header          type ref to cl_salv_wd_column_header,
        lo_dropdown_by_key type ref to cl_salv_wd_uie_dropdown_by_key,
        lo_input_field     type ref to cl_salv_wd_uie_input_field,
        lo_text_view       type ref to cl_salv_wd_uie_text_view,
        lo_checkbox        type ref to cl_salv_wd_uie_checkbox,
        lr_link            type ref to cl_salv_wd_uie_link_to_action,
        lv_field_name      type string,
        lv_length          type i.
    
    
      lt_columns = lo_config->if_salv_wd_column_settings~get_columns( ).
    
      loop at lt_columns into ls_column.
        lo_column = ls_column-r_column.
        lo_header = lo_column->get_header( ).
        lo_header->set_ddic_binding_field( if_salv_wd_c_column_settings=>ddic_bind_none ).
    
        case ls_column-id.
          when 'MATNR'.
            "lo_column->set_width( value = '18' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A01' )  ).
            create object lo_input_field exporting value_fieldname = ls_column-id.
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
    
          when 'WERKS'.
            "lo_column->set_width( value = '4' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A10' )  ).
            create object lo_input_field
              exporting
                value_fieldname = ls_column-id.
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
    
          when 'EKGRP'.
            "lo_column->set_width( value = '3' ).
            lo_header->set_text( value = wd_assist->get_text( key = 'A11' )  ).
            create object lo_input_field
              exporting
                value_fieldname = ls_column-id.
            lo_input_field->set_read_only_fieldname( value = 'FG_READ' ).
            lo_column->set_cell_editor( lo_input_field ).
    
          when others.
            lo_column->set_visible( value = cl_wd_uielement=>e_visible-blank ).
    
        endcase.
    
      endloop.
    endmethod.

     上述操作基本完成。

     2.7测试

     

     

     

     

    3.关注点

     ALV组件:组件尽量不要重复使用,多视图容易冲突。

     Context节点:节点元素属性根据用途区分不同的业务场景。

     关系:

      Windows->view->container->select_options/Table->Component use

      Windows->view->Inbound/Outbound Plugs

     语法关注:

    lo_nd_detail type ref to if_wd_context_node,       "节点
    lo_el_detail type ref to if_wd_context_element,    "元素
    lt_detail  type wd_this->element_zsmm_detail.    "内表
    ls_detail    type wd_this->element_zsmm_detail.   "结构
    
    "获取节点ZSMM_DETAIL
    lo_nd_detail = wd_context->get_child_node( name = wd_this->wdctx_zsmm_detail ).
    "获取节点内表数据
    lo_nd_alv->get_static_attributes_table( importing table = lt_detail ).
    "获取行记录
    read table lt_detail index r_param->index into ls_detail 
    "获取节点元素
    lo_el_detail = lo_nd_detail->get_element( ).
    "节点元素属性赋值
    lo_el_detail->set_static_attributes( static_attributes = ls_detail ).
    "节点数据绑定
    lo_nd_detail->bind_table(  new_items = lt_detail  set_initial_elements = abap_true ).

     

    转载于:https://www.cnblogs.com/ricoo/p/10271919.html

    展开全文
  • Avkon视图切换架构之调试小结 ----Symbian OS传统程序架构续 在我看来,理解了传统的Symbian OS程序架构可以轻松的帮助我们理解Avkon视图切换架构,因为我们可以事先理解一些看起来比较抽象的概念,...

    Avkon视图切换架构之调试小结
    ----Symbian OS传统程序架构续
    在我看来,理解了传统的Symbian OS程序架构可以轻松的帮助我们理解Avkon视图切换架构,因为我们可以事先理解一些看起来比较抽象的概念,比如容器,窗口,复合控件等,了解一下最基本的Symbian程序框架。实际上,Avkon视图切换架构无非就是在传统的Symbian程序架构上做的一种扩展而已。最大的区别就是多了一个视图类,即继承自CAvkonView类的自定义View。
        在SDK里,有一个Avkon视图切换的例子MultiViews,我看了一下,这个例子比较非常简单,框架非常清晰,很适合初学者,不过我感觉仅仅研究这个例子的实际意义并不大,因此本文并不针对这个例子,而是我们通过向导创建S60程序时,向导为我们提供的框架即S60 View based application。这个框架提供的架构要比例子MultiViews稍微复杂一点,因为多了一个新的概念,即将面板应用到了程序中,我将这个演示程序取名为MultiViewsTest,因为仅为了演示学习用,所以我基本上没有对框架提供的代码做修改。
        通过这个例子MultiViewsTest学习Avkon视图切换架构,重点无非放在MultiViewsTestContainer.cpp、MultiViewsTestView.cpp、MultiViewsTestAppUi.cpp这三个源程序文件,以及它们中定义的类的成员函数上,当然因为有了面板(StatusPane),我们也会在这里对面板的相关知识作一小记。
        在做这个例子的时候,我采取的办法是,先删除上面三个源程序文件的内容,然后自己根据它们对应的头文件,自己编写函数代码,自己确定需要引入的头文件,因为我认为光看代码不去亲自调试对新手来说,是不会有太多提高的。在我写代码的过程中,因为不仔细、记错了或不理解等各种原因,出现了不少错误,因此,我也会在这里将这些错误记录下来,并做一下错误分析,希望各位同仁不再犯我所经历过的错误。
    一、
        在这三个文件里,MultiViewsTestContainer.cpp和传统的Symbian程序架构中的Container文件可以说完全相同,这个容器中也是只有两个Label子控件,因此我们就从这个最简单的开始。
        在文件MultiViewsTestContainer.cpp中我们定义了它所对应的头文件MultiViewsTestContainer.h中定义的容器类CmultiViewsTestContainer的成员函数的具体实现。在编代码的时候,出了几个小错误,摘抄如下:
    void CMultiViewsTestContainer::ConstructL(const TRect& aRect)
    {
         CreateWindowL();//忘了"L",嘿嘿
     
         iLabel = new(ELeave)CEikLabel;
         iLabel->SetContainerWindowL(*this);
         iLabel->SetTextL(_L("Container_Label_1"));
     
         iToDoLabel = new(ELeave)CEikLabel;
         iToDoLabel->SetContainerWindowL(*this);
         iToDoLabel->SetTextL(_L("Container_Label_2"));
     
         SetRect(aRect);//设置窗口范围
         ActivateL();//忘记了加"L",嘿嘿
    }
    ――――――――――――――――――――――――――――――――――――――――――――――
    //设置标签的显示位置和大小
    void CMultiViewsTestContainer::SizeChanged()
    {
         iLabel->SetExtent(TPoint(10,10),iLabel->MinimumSize());//这里的SetExtent()方法,没有L
         iToDoLabel->SetExtent(TPoint(10,100),iToDoLabel->MinimumSize());
    }
    ――――――――――――――――――――――――――――――――――――――――――――――
    void CMultiViewsTestContainer::Draw(const TRect& aRect) const
    {
         CWindowGc& gc=SystemGc();//SymtemGc()是类CCoeControl的方法,获取图形上下文
         gc.SetBrushColor(KRgbRed);
         gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
         gc.DrawRect( aRect );
    }
    ――――――――――――――――――――――――――――――――――――――――――――――
     
    在编这个文件的时候,没有碰到大的障碍,因为这里的这个容器类和传统架构中的容器类是一摸一样的,呵呵,但是还是出了几个小错误。
    1、 Symbian中编码和其他C++编码不太一样,对于可能产生异常的函数,名字都会以“L”来结尾,因此往往会搞混的就是,这些常用函数中,哪个有L,哪个没有L,在上面我就搞混了,因此对于这些常用的函数,我们应该熟记。
    再写一遍:
    CreateWindowL(); ActivateL(); SetExtent();
    2、 忘了绘图函数Draw()中,定义图形上下文的类,及产生图形上下文实例的方法:
    CwindowGc& = SystemGc();
    当然还不能忘了该函数的最后一步,就是绘制区域(注意绘制的不一定非要是整个窗口,通过参数aRect具体确定):gc.DrawRect(aRect);
     
    二、自定义的继承自CAknView类的视图类CmultiViewsTestView
    这个类我们在MultiViewsTestView.cpp中定义具体实现,这个视图类实际上起到在Container和AppUi之间的一个桥梁作用,AppUi不在操作Container,而是通过View间接操作。当然这个Container要作为View类的一个private成员,即:
    private:
        CmultiViewsTestContainer* iContainer;
     
    当然,关于iContainer所指向的容器实例的创建和释放也要在这个View类中来完成。关键就是在View类的哪个函数中编写创建和释放的具体代码呢?这就是在
    void CMultiViewsTestView::DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
    const TDesC8& aCustomMessage)编写创建代码,在
    void CMultiViewsTestView::DoDeactivate()中编写释放代码。
     
    一定要注意,不要在View类的ConstructL()方法中创建iContainer,但可以在View类的析构函数中释放iContainer(只不过这和DoDeactivate()方法中的代码重复了)。那么可能有人会问,那么构造函数和析构函数中定义什么呢?它们中的代码定义如下:
    #include < MultiViewsTest.rsg >
    void CMultiViewsTestView::ConstructL()
    {
         BaseConstructL(R_MULTIVIEWSTEST_VIEW1);//将资源文件中定义的视图资源传入
    }
    ――――――――――――――――――――――――――――――――――――――――――――――
    CMultiViewsTestView::~CMultiViewsTestView()
    {
         if(iContainer!=NULL)
         {
         //不是RemoveFromStackL(iContainer),而是AppUi()->RemoveFromViewStack( *this, iContainer )
         //IMPORT_C CAknViewAppUi* CAknView::AppUi() const [protected]
              AppUi()->RemoveFromViewStack( *this, iContainer );
             delete iContainer;
              iContainer=NULL;
         }
    }
    分析:
    1、     ConstructL()方法中仅仅创建了一个View的基本框架,通过方法BaseConstructL(R_MULTIVIEWSTEST_VIEW1),其中参数R_MULTIVIEWSTEST_VIEW1是在.rss资源文件中定义的一个View资源名。注意:为此我们需要将资源文件#include,但我们引入的不能是MultiViewsTest.rss,而是MultiViewsTest.rsg,在我们编译程序的时候,编译器会将.rss编译出一个资源索引文件.rsg,并把该.rsg文件放在系统的头文件include目录中,也可能放在项目的Group目录中。
    2、     可以看到析构函数中,我们释放了iContainer,实际上这是和DoDeactivate()函数中的定义重复的。这句代码AppUi()->RemoveFromViewStack( *this, iContainer );其中AppUi()是继承自类CAknView中的成员函数,可以获得这个View所对应的ViewAppUi的指针(即程序中的AppUi类的对象指针),RemoveFromViewStack( *this, iContainer );从View的Stack中将这个iContainer移除。
     
    再看DoActivateL()和DoDeActivate()的代码:
    DoActivateL():构造容器,并绘制窗口
     
    void CMultiViewsTestView::DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId,
                const TDesC8& aCustomMessage)
    {
         iContainer = new(ELeave)CMultiViewsTestContainer;
         iContainer->SetMopParent(this);
         iContainer->ConstructL(ClientRect());//创建并显示容器内容
         AppUi()->AddToStackL(*this,iContainer);//将容器推入栈顶
    }
    ―――――――――――――――――――――――――――――――――――――――――――――
    DoDeActivate():销毁容器对象,跟View类的析构函数功能类似。
     
    void CMultiViewsTestView::DoDeactivate()
    {
         if(iContainer!=NULL)
         {
              //RemoveFromStackL(iContainer); //AppUi()->RemoveFromViewStack( *this, iContainer );
              AppUi()->RemoveFromViewStack( *this, iContainer );
             delete iContainer;
              iContainer=NULL;
         }
    }
    分析:
    1、 在DoActivate()方法中,主要是创建容器iContainer和将iContainer推入栈顶,以便接收用户事件。创建之所以比较复杂,是因为我没有在Container类中定义NewL()和NewLC()方法。所以显得稍微复杂。
    2、 可以看到DoDeactivate()方法中的代码和View类的析构函数代码是一样的。
     
    问题:有点疑问就是容器入栈的时候用的是AddToStackL()方法,而出栈的时候却是RemoveFromViewStack()方法,为什么不匹配呢?
    据xiaobai网友验证,改为AppUi()->RemoveFromStack()后,程序也没有错误,我的理解是:View的Stack和程序的Stack是相通的,只是个人的猜想,不正确的话,还请高手指教,谢谢。
    除了上面的四个方法,我们继续看View类所特有的其他方法:
     
    TUid CMultiViewsTestView::Id() const
    {
         return KViewId;
    }
    在这里KviewId是我们事先定义的这个View的UID,即const TUid KViewId = {1};格式是大括号“{ }”包含的1,而不是直接用1初始化。
    View类必须包含一个Id()函数,从而系统可以标志这个类。
     
    ―――――――――――――――――――――――――――――――――――――――
    视图View可以有自己的菜单资源,当然这也需要在.rss文件中进行定义,格式如下:
     
    RESOURCE AVKON_VIEW r_multiviewstest_view1
        {
        hotkeys = r_multiviewstest_hotkeys;
        menubar = r_multiviewstest_menubar_view1;
        cba     = R_AVKON_SOFTKEYS_SELECTION_LIST;   
        }
     
    RESOURCE MENU_BAR r_multiviewstest_menubar_view1
        {
        titles =
            {
            MENU_TITLE { menu_pane = r_multiviewstest_app_menu; txt = "App"; },
            MENU_TITLE { menu_pane = r_multiviewstest_view1_menu; txt = "View"; }
            };
        }
     
    RESOURCE MENU_PANE r_multiviewstest_view1_menu
        {
        items =
            {
            MENU_ITEM { command = EMultiViewsTestCmdAppTest; txt = qtn_view1_option_item; }
            };
    }
     
    RESOURCE MENU_PANE r_multiviewstest_app_menu
        {
        items =
            {
            MENU_ITEM { command = EMultiViewsTestCmdAppTest; txt = qtn_appl_option_item; },
            MENU_ITEM { command = EAknCmdExit; txt = qtn_appl_exit; }
            };
    }
    ――――――――――――――――――――――――――――――――――――――――――――――
    下面是View中的HandCommandL()方法和AppUi中的HandCommandL()方法:
    void CMultiViewsTestAppUi::HandleCommandL(TInt aCommand)
    {
         switch(aCommand)
         {
             case EEikCmdExit:
                  Exit();
                  break;
             case EMultiViewsTestCmdAppTest:
                  iEikonEnv->InfoMsg(_L("test"));
                break;
              default:
                  break;
         }
    }
     
    void CMultiViewsTestView::HandleCommandL(TInt aCommand)
    {
         switch ( aCommand )
        {
            case EAknSoftkeyOk:
                {
                iEikonEnv->InfoMsg( _L("view1 ok") );
                break;
                }
            case EAknSoftkeyBack:
                {
                AppUi()->HandleCommandL(EEikCmdExit);
                break;
                }
            default:
                {
                AppUi()->HandleCommandL( aCommand );
                break;
                }
         }
    }
    在上面的代码中,出现了4个菜单命令事件EEikCmdExit、EMultiViewsTestCmdAppTest、EAknSoftkeyOk、EAknSoftkeyBack。
    那么其中哪些是自定义的,哪些又是系统定义的呢?
    这里只有命令EmultiViewsTestCmdAppTest是自己在.hrh文件中定义的。如下:
    enum TMultiViewsTestCommandIds
    {
        EMultiViewsTestCmdAppTest = 1
    };
     
    通过查看查看View的HandCommandL()方法会发现,它只处理自己的一个菜单命令EaknSoftkeyOk,而其他不属于自己视图所有的菜单的命令去调用AppUi里的HandCommandL()方法。这样做的好处是,实现了代码的公用,也就是说,如果有多个视图,并且多个视图都有相同的命令的话,这时候,我们就可以将菜单命令分为两类:一类是各个View所特有的菜单命令,另一类是每个View都公有的。View特有的命令在自己类的HandCommandL()中定义执行操作,而公有的菜单命令,则可以放到AppUi的HandCommandL()里面去定义执行操作。
    ―――――――――――――――――――――――――――――――――――――――
    在View类中还有一些其他的成员函数:如:
    //用户区大小改变时响应
    void CMultiViewsTestView::HandleClientRectChange()
    {
         if(iContainer) //即iContainer!=NULL
         {
              iContainer->SetRect(ClientRect());
         }
    }
    这个函数应该是一个回调函数,用在用户区域大小改变时,不过,我没有在SDK中找到这个函数,希望知道的朋友告知这个函数是在哪里定义的。
    当然向这样类似功能的函数肯定还有不少,根据我们的程序不同,所采用的肯定不同,需要我们日后多多积累。在这里只是想介绍简单的View程序架构,所以向这样功能的函数,也就不作过多的解释了。
    ―――――――――――――――――――――――――――――――――――――――
     
    三、View架构的AppUi
    好了,现在来看稍微有点麻烦的AppUi类,即CMultiViewsTestAppUi。实际上,如果本例中不采用面板StatusPane的话,这个AppUi还是比较简单的,因此,这里所谓的麻烦,主要还是关于StatusPane的,通过这个小例子,在理解View程序架构的同时,我们还可以对StatusPane有个简单的认识,呵呵。
     
    先需要注意的一点不同就是,程序中用到的View类,不需要作为AppUi类的私有成员,这个和传统架构有点不同,Container需要作为AppUi的私有成员,在这里是Container作为了View的私有成员,需要注意,我们只需在AppUi的ConstructL()中,创建View,并把它们添加到View服务器中,然后设置一个默认显示的视图即可:
    void CMultiViewsTestAppUi::ConstructL()
    {
         BaseConstructL();
        
         //创建一个状态面板指针,一个创建另一个
         CEikStatusPane* sp = StatusPane(); //CEikStatusPane类名忘了e,嘿嘿
     
         iNaviPane = (CAknNavigationControlContainer*)sp->ControlL(
            TUid::Uid(EEikStatusPaneUidNavi));
     
         iDecoratedTabGroup = iNaviPane->ResourceDecorator();
     
         if (iDecoratedTabGroup)
        {
              iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
              iTabGroup->SetObserver( this );
         }
        
    //将CMultiViewsTestView对象的二阶段构造代码放在UI里面了,最好在CMultiViewsTestView类里。
         CMultiViewsTestView* view1 = new (ELeave) CMultiViewsTestView;
         CleanupStack::PushL(view1);
         view1->ConstructL();
         AddViewL(view1);
         CleanupStack::Pop(view1);//这个Pop()方法没有"L",但上面的PushL()方法有"L"
     
         CMultiViewsTestView2* view2 = new(ELeave) CMultiViewsTestView2;
         CleanupStack::PushL(view2);
         view2->ConstructL();
         AddViewL(view2);
         CleanupStack::Pop(view2);
        
         SetDefaultViewL(*view1);//SetDefaultViewL()方法忘了"L",嘿嘿
    }
    上面的红色部分,即为所需代码,剩余的是关于面板StatusPane的了。
    ―――――――――――――――――――――――――――――――――――――――
    下面来看有关面板StatusPane的代码:
    为了在程序中使用面板,我们需要在.rss文件中定义面板资源,相关定义如下:
    RESOURCE STATUS_PANE_APP_MODEL r_multiviewstest_status_pane
        {
         panes =
             {
              SPANE_PANE
                  {
                  id = EEikStatusPaneUidNavi;
                  type = EAknCtNaviPane;
                  resource = r_multiviewstest_navi_decorator;
                  }
             };
        }
     
    //    r_multiviewstest_navi_decorator
    RESOURCE NAVI_DECORATOR r_multiviewstest_navi_decorator
        {
        type = ENaviDecoratorControlTabGroup;
        control = TAB_GROUP
             {
              tab_width = EAknTabWidthWithTwoTabs; // two tabs
             active = 0;
             tabs = {
                  TAB
                  {
                    id = EMultiViewsTestView1Tab; // from application hrh
                    txt = qtn_view1_tab;
                  },
                  TAB
                  {
                    id = EMultiViewsTestView2Tab;
                    txt = qtn_view2_tab;
                  }
                  };
             };
         }
    这是面板资源的定义格式,其中两个面板的id,即EMultiViewsTestView1Tab和EMultiViewsTestView2Tab需要在.hrh文件中定义,即如下:
    enum TMultiViewsTestTabViewId
    {
        EMultiViewsTestView1Tab= 1,
        EMultiViewsTestView2Tab
    };
    ――――――――――――――――――――――――――――――――――――――――――――――
    有了上面的前提之后,我们就来看具体的AppUi中有关StatusPane的源程序文件:
    先需要给AppUi类定义三个private成员,如下:
    private:
        CAknNavigationControlContainer* iNaviPane;
        CAknTabGroup*                   iTabGroup;
    CAknNavigationDecorator*        iDecoratedTabGroup;
     
    为了在程序中使用StatusPane,我们需要定义上面三个对象指针,其中:
    1、   CAknNavigationControlContainer:
    2、   CAknTabGroup:面板的函数集
    3、   CAknNavigationDecorator:
    下面是AppUi类的ConstructL()中初始化这些指针的代码(这里只截取了部分ConstructL()和StatusPane有关的代码):
    void CMultiViewsTestAppUi::ConstructL()
    {
         CEikStatusPane* sp = StatusPane(); //CEikStatusPane类名忘了e,嘿嘿
        
         iNaviPane = (CAknNavigationControlContainer*)sp->ControlL(
            TUid::Uid(EEikStatusPaneUidNavi));
     
         iDecoratedTabGroup = iNaviPane->ResourceDecorator();
     
         if (iDecoratedTabGroup)
        {
              iTabGroup = (CAknTabGroup*) iDecoratedTabGroup->DecoratedControl();
              iTabGroup->SetObserver( this );
         }
    }
    从上面的代码,可以看出,为了使用状态面板,我们必须要用用到除面板类CEikStatusPane之外的一些其他类,(而不是简单的只定义一个CEikStatusPane就可以了,需要注意,这里的CEikStatusPane并没有作为AppUi类的成员存在。),并且这几个指针的创建都是顺序的,即先创建了sp之后,再依次创建其他指针,最终是为了创建iTabGroup。
    ―――――――――――――――――――――――――――――――――――――――
    看一下为了使用StatusPane需要用到的AppUi的成员函数:
    TKeyResponse CMultiViewsTestAppUi::HandleKeyEventL(
                const TKeyEvent& aKeyEvent,TEventCode aType)
    {
         if(iTabGroup == NULL)
         {
             return EKeyWasNotConsumed;
         }
         //如果按下的是左方向键或右方向键
         if(aKeyEvent.iCode==EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow)
         {
             return iTabGroup->OfferKeyEventL(aKeyEvent, aType);
         }
         else
         {
             return EKeyWasNotConsumed;
         }
    }
     
    //这是一个回调函数,定义在接口MAknTabObserver中,需要继承
    void CMultiViewsTestAppUi::TabChangedL(TInt aIndex)
    {
         ActivateLocalViewL(TUid::Uid(iTabGroup->TabIdFromIndex(aIndex)));//激活视图
    }
    ―――――――――――――――――――――――――――――――――――――――
    最后就是AppUi类的析构函数,因为程序中的View,并不是该类的成员,所以析构函数中,无需销毁视图类,只需销毁该类中为类成员分配了堆内存的内存即可。所以代码如下:
    CMultiViewsTestAppUi::~CMultiViewsTestAppUi()
    {
         delete iDecoratedTabGroup;
    }
    查看析构函数,非常简单,仅仅释放了iDecoratedTabGroup。那么视图对象在什么地方销毁的呢?如果不通过我们自己销毁的话,应该就是由视图服务器在程序退出的时候自动销毁的。还有就是StatusPane等对象,为什么也没有在析构函数中删除,我的理解是这些对象都是由框架进行管理的,所以不需要我们自己显示销毁,在程序关闭时,会由程序框架将它们自动销毁。
     
    ―――――――――――――――――――――――――――――――――――――――
    小结:程序可能存在着多个View,但是一次只能显示一个,因此它们之间切换显示的方法比较重要,也是经常使用的,采用的函数就是CAknViewAppUi中定义的
    IMPORT_C void CAknViewAppUi::ActivateLocalViewL  (  TUid  aViewId  )   

    通过传递View的UID实现切换。
     
     
     
     
    备注:这个例子程序中由于使用了StatusPane,所以略微显得累赘,如果仅想了解View切换架构,还是建议看SDK自带的MultiViews这个例子。
    应该说StatusPane也是程序中经常用到的,它位于屏幕的上层,因为应用程序窗口的标准面板由状态面板、主面板和软键面板组成,而主面板就是客户矩形显示的位置,也就是除去状态面板和软键面板后剩余的区域。状态面板StatusPane又分为信号面板、上下文面板、标题面板、导航面板、电池面板等子面板,因此,要想操作这些子面板需要事先通过StatusPane获得这些子面板的指针,通过sp->ControlL()方法即可。
    本例的程序代码,朋友可以在根据S60SDK2.1的向导自动生成,程序名取MultiViewsTest即可。
     
    声明:这只是我作为一个Symbian新人对View架构的理解而已,写下来只是希望比我还新的新人在碰到这种架构问题时,看到我的文章,能够有所启发。限于本人水平有限,可能文中有理解错误之处,还请高手不吝赐教。
    转载请注明出处,谢谢。
     


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Eddy_0825/archive/2007/04/30/1593265.aspx

    展开全文
  • iOS ---视图切换

    2015-10-30 14:42:49
    转载自:... 1.NavigationController切换UIViewController的两种方式 方法一右侧进入 1 SecondViewController* svc=[[SecondViewController alloc]init];
  • PublishViewController * publishVC = [[PublishViewController alloc]init];... //切换一、NavigationController的push  [self.navigationController pushViewController:publishVC animated:YES];
  • 第一种:直接从场景切换到UIViewController视图(网上流传的版本) - (void) showUIViewController:(UIViewController *) controller {    [[Director sharedDirector] pause];    [UIView ...
  • PowerPoint 2007的视图

    2019-10-28 11:10:35
    PowerPoint 2007的视图:普通视图、大纲视图、幻灯片视图、幻灯片浏览视图、幻灯片放映视图备注页视图、母版视图。 幻灯片制作的“三板斧”:第一斧:应用模板(规定幻灯片的风格) 第二斧:添加内容(内容是...
  • 物化视图

    2018-03-14 15:06:01
    转自...普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。 1、物化视图...
  • 方法一:旋转视图,然后重新绘画view; 方法二:使用一个已经被apple放弃的私有API函数”setOrientation”(详见参考资料),实现旋转视图; (1)方法一的实例: [[UIApplication sharedApplication] ...
  • oracle 物化视图

    2012-11-06 22:31:41
    [size=large]一、物化视图的一般用法物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询...
  • oracle物化视图

    2019-09-21 20:35:40
    一、物化视图的一般用法 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体...
  • PPT使用演示者视图

    2020-07-17 10:46:59
    目的是演示时观众看全屏,自己看备注版本,同时有计时器功能。 操作步骤 首先通过HDMI或者VGA连接线连接电脑和投影仪,并确认屏幕投影成功: 桌面右键->显示设置; 选择2号显示器,滑倒页面底部至多显示器设置;...
  • Oracle 物化视图

    2018-03-22 15:57:46
    一、物化视图的一般用法物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体...
  • BUZ-视图区域

    2018-12-17 22:00:40
    Region -- 视图区域管理 我们可以通过Layout设计多个页面布局方案,并随意切换整体布局。 对外一般在Layout文件中使用,对内一般指的是某个区域的管理。 Region -- 视图区域管理 我们可以通过Layout设计...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,813
精华内容 3,525
关键字:

备注页视图切换